AbstractObjectFactory.java
01 /*
02  * Copyright 2008-2014 the original author or authors.
03  *
04  * Licensed under the Apache License, Version 2.0 (the "License");
05  * you may not use this file except in compliance with the License.
06  * You may obtain a copy of the License at
07  *
08  *     http://www.apache.org/licenses/LICENSE-2.0
09  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.codehaus.griffon.runtime.core.storage;
17 
18 
19 import griffon.core.Configuration;
20 import griffon.core.GriffonApplication;
21 import griffon.core.storage.ObjectFactory;
22 
23 import javax.annotation.Nonnull;
24 import javax.inject.Inject;
25 import java.util.Collections;
26 import java.util.List;
27 import java.util.Map;
28 
29 import static griffon.util.ConfigUtils.getConfigValue;
30 import static griffon.util.GriffonNameUtils.requireNonBlank;
31 import static java.util.Objects.requireNonNull;
32 
33 /**
34  @author Andres Almiray
35  @since 2.0.0
36  */
37 public abstract class AbstractObjectFactory<T> implements ObjectFactory<T> {
38     private final Configuration configuration;
39     private final GriffonApplication application;
40 
41     @Inject
42     public AbstractObjectFactory(@Nonnull Configuration configuration, @Nonnull GriffonApplication application) {
43         this.configuration = requireNonNull(configuration, "Argument 'configuration' must not be null");
44         this.application = requireNonNull(application, "Argument 'application' must not be null");
45     }
46 
47     @Nonnull
48     public Configuration getConfiguration() {
49         return configuration;
50     }
51 
52     @Nonnull
53     public GriffonApplication getApplication() {
54         return application;
55     }
56 
57     @Nonnull
58     protected abstract String getSingleKey();
59 
60     @Nonnull
61     protected abstract String getPluralKey();
62 
63     protected void event(@Nonnull String eventName, @Nonnull List<?> args) {
64         application.getEventRouter().publishEvent(eventName, args);
65     }
66 
67     @Nonnull
68     @SuppressWarnings({"unchecked""ConstantConditions"})
69     protected Map<String, Object> narrowConfig(@Nonnull String name) {
70         requireNonBlank(name, "Argument 'name' must not be blank");
71         if (KEY_DEFAULT.equals(name&& configuration.containsKey(getSingleKey())) {
72             return (Map<String, Object>configuration.get(getSingleKey());
73         else if (configuration.containsKey(getPluralKey())) {
74             Map<String, Object> elements = (Map<String, Object>configuration.get(getPluralKey());
75             return getConfigValue(elements, name, Collections.<String, Object>emptyMap());
76         }
77         return Collections.emptyMap();
78     }
79 }