GriffonClass.java
001 /*
002  * Copyright 2008-2015 the original author or authors.
003  *
004  * Licensed under the Apache License, Version 2.0 (the "License");
005  * you may not use this file except in compliance with the License.
006  * You may obtain a copy of the License at
007  *
008  *     http://www.apache.org/licenses/LICENSE-2.0
009  *
010  * Unless required by applicable law or agreed to in writing, software
011  * distributed under the License is distributed on an "AS IS" BASIS,
012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  * See the License for the specific language governing permissions and
014  * limitations under the License.
015  */
016 package griffon.core.artifact;
017 
018 import griffon.core.GriffonApplication;
019 
020 import javax.annotation.Nonnull;
021 import javax.annotation.Nullable;
022 import java.util.Arrays;
023 import java.util.Set;
024 import java.util.TreeSet;
025 
026 /**
027  * Represents any class in a Griffon application that is related to an artifact.</p>
028  * While {@code GriffonArtifact} points to the real artifact instance, this class points to the meta
029  * information that can be obtained from such artifact.
030  *
031  @author Steven Devijver (Grails 0.1)
032  @author Graeme Rocher (Grails 0.1)
033  @author Andres Almiray
034  */
035 public interface GriffonClass {
036     Set<String> STANDARD_PROPERTIES = new TreeSet<>(
037         Arrays.asList("class""UIThread""application""griffonClass""log""artifactType""metaClass"));
038 
039     @Nonnull
040     GriffonApplication getApplication();
041 
042     /**
043      * Gets the initial value of the given property on the class.</p>
044      *
045      @param name The name of the property
046      @return The initial value
047      */
048     @Nullable
049     Object getPropertyValue(@Nonnull String name);
050 
051     /**
052      * Returns true if the class has the specified property.</p>
053      *
054      @param name The name of the property
055      @return True if it does
056      */
057     boolean hasProperty(@Nonnull String name);
058 
059     /**
060      * Returns the logical name of the class in the application without the trailing convention part if applicable
061      * and without the package name.</p>
062      *
063      @return the logical name
064      */
065     @Nonnull
066     String getName();
067 
068     /**
069      * Returns the short name of the class without package prefix</p>
070      *
071      @return The short name
072      */
073     @Nonnull
074     String getShortName();
075 
076     /**
077      * Returns the full name of the class in the application with the the trailing convention part and with
078      * the package name.</p>
079      *
080      @return the full name
081      */
082     @Nonnull
083     String getFullName();
084 
085     /**
086      * Returns the name of the class as a property name</p>
087      *
088      @return The property name representation
089      */
090     @Nonnull
091     String getPropertyName();
092 
093     /**
094      * Returns the logical name of the class as a property name</p>
095      *
096      @return The logical property name
097      */
098     @Nonnull
099     String getLogicalPropertyName();
100 
101     /**
102      * Returns the name of the property in natural terms (eg. 'lastName' becomes 'Last Name').<p>
103      *
104      @return The natural property name
105      */
106     @Nonnull
107     String getNaturalName();
108 
109     /**
110      * Returns the package name of the class.</p>
111      *
112      @return the package name
113      */
114     @Nonnull
115     String getPackageName();
116 
117     /**
118      * Returns the actual class represented by the GriffonClass</p>
119      *
120      @return the class
121      */
122     @Nonnull
123     Class<?> getClazz();
124 
125     /**
126      * Returns the artifact type represented by the GriffonClass</p>
127      *
128      @return the artifact type, i.e. "controller".
129      */
130     @Nonnull
131     String getArtifactType();
132 
133     /**
134      * Obtains a property value for the given name and type.
135      *
136      @param name The name
137      @param type The type
138      @return The property value
139      */
140     @Nullable
141     <T> T getPropertyValue(@Nonnull String name, @Nonnull Class<T> type);
142 }