001: /*
002: * Copyright 2006-2007 Luca Garulli (luca.garulli@assetdata.it)
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005: * use this file except in compliance with the License.
006: *
007: * You may obtain a copy of the License at
008: * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
009: * or agreed to in writing, software distributed under the License is
010: * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
011: * KIND, either express or implied. See the License for the specific language
012: * governing permissions and limitations under the License.
013: */
014: package org.romaframework.aspect.reporting.jr.view.domain;
015:
016: import java.util.ArrayList;
017: import java.util.Collection;
018: import java.util.Collections;
019:
020: import org.romaframework.aspect.core.annotation.AnnotationConstants;
021: import org.romaframework.aspect.core.annotation.CoreClass;
022: import org.romaframework.aspect.reporting.ReportingAspect;
023: import org.romaframework.aspect.reporting.ReportingException;
024: import org.romaframework.aspect.view.ViewAspect;
025: import org.romaframework.aspect.view.ViewCallback;
026: import org.romaframework.aspect.view.annotation.ViewAction;
027: import org.romaframework.aspect.view.annotation.ViewField;
028: import org.romaframework.aspect.view.feature.ViewElementFeatures;
029: import org.romaframework.core.config.Refreshable;
030: import org.romaframework.core.config.RomaApplicationContext;
031: import org.romaframework.core.domain.message.MessageOk;
032: import org.romaframework.core.flow.ObjectContext;
033: import org.romaframework.core.schema.SchemaClass;
034: import org.romaframework.core.schema.SchemaManager;
035: import org.romaframework.core.serializer.RomaSerializationException;
036: import org.romaframework.core.validation.CustomValidation;
037: import org.romaframework.core.validation.ValidationException;
038:
039: /**
040: * GUI to manage domain entities.
041: *
042: * @author Luca Garulli (luca.garulli@assetdata.it)
043: */
044: @CoreClass(orderFields="entity availableClassNames functions",orderActions="save edit preview")
045: public class TemplateManagerMain implements CustomValidation,
046: ViewCallback, Refreshable {
047: @ViewField(selectionField="selectedAvailableClassName",enabled=AnnotationConstants.FALSE)
048: protected ArrayList<String> availableClassNames;
049: protected SchemaClass selectedAvailableClass;
050: protected String search;
051: protected boolean applicationDomainOnly = true;
052:
053: public TemplateManagerMain() {
054: loadClasses();
055: }
056:
057: /**
058: * Load all the classes in the schema manager
059: *
060: */
061: private void loadClasses() {
062: selectedAvailableClass = null;
063: // search = "";
064:
065: SchemaManager schemaMgr = ObjectContext.getInstance()
066: .getComponent(SchemaManager.class);
067: Collection<SchemaClass> infos = schemaMgr.getAllClassesInfo();
068: availableClassNames = new ArrayList<String>();
069: if (!isApplicationDomainOnly()) {
070: for (SchemaClass cls : infos) {
071: availableClassNames.add(cls.getName());
072: }
073: } else {
074: for (SchemaClass cls : infos) {
075: String packageApp = RomaApplicationContext
076: .getInstance().getApplicationPackage();
077: String classPackage = cls.getClazz().getPackage()
078: .getName();
079: if (classPackage.startsWith(packageApp)) {
080: availableClassNames.add(cls.getName());
081: }
082: }
083: }
084: Collections.sort(availableClassNames);
085: ObjectContext.getInstance()
086: .refresh(this , "availableClassNames");
087:
088: }
089:
090: public void onShow() {
091: loadClasses();
092: }
093:
094: /**
095: * Load a class given the name.
096: *
097: */
098: public void load() {
099: try {
100: ObjectContext.getInstance().getComponent(
101: SchemaManager.class).getClassInfo(search);
102: setSelectedAvailableClassName(search);
103: loadClasses();
104: ObjectContext.getInstance().refresh(this ,
105: "availableClassNames");
106: ObjectContext.getInstance().show(
107: new MessageOk("", "", null,
108: "The Class is now available in list!"));
109: } catch (Exception e) {
110: ObjectContext.getInstance().show(
111: new MessageOk("", "", null, "Class not found"));
112: }
113: }
114:
115: public void setSelectedAvailableClassName(String iSelection) {
116: ObjectContext.getInstance().setActionFeature(this ,
117: ViewAspect.ASPECT_NAME, "preview",
118: ViewElementFeatures.VISIBLE, iSelection != null);
119: selectedAvailableClass = ObjectContext.getInstance()
120: .getComponent(SchemaManager.class).getClassInfo(
121: iSelection.toString());
122: ObjectContext.getInstance()
123: .refresh(this , "availableClassNames");
124:
125: search = iSelection.toString();
126: ObjectContext.getInstance().refresh(this , "search");
127: }
128:
129: @ViewField(visible=AnnotationConstants.FALSE)
130: public String getSelectedAvailableClassName() {
131: if (selectedAvailableClass != null) {
132: return selectedAvailableClass.getName();
133: }
134: return null;
135: }
136:
137: public void validate() throws ValidationException {
138: }
139:
140: public ArrayList<String> getAvailableClassNames() {
141: return availableClassNames;
142: }
143:
144: public void setAvailableClassNames(
145: ArrayList<String> availableClassNames) {
146: this .availableClassNames = availableClassNames;
147: }
148:
149: public void edit() throws RomaSerializationException {
150: if (selectedAvailableClass == null) {
151: return;
152: }
153: TemplateManagerPage pageToShow = new TemplateManagerPage(
154: selectedAvailableClass);
155: pageToShow.setBackObject(this );
156: ObjectContext.getInstance().show(pageToShow);
157: }
158:
159: public synchronized void save() throws ReportingException {
160:
161: if (selectedAvailableClass == null)
162: return;
163: ObjectContext.getInstance().getComponent(ReportingAspect.class)
164: .createTemplate(selectedAvailableClass);
165: ObjectContext.getInstance().show(
166: new MessageOk("", "", null,
167: "Templates saved successfully."));
168: }
169:
170: public void onDispose() {
171: }
172:
173: public String getSearch() {
174: return search;
175: }
176:
177: public void setSearch(String search) {
178: this .search = search;
179: }
180:
181: @ViewAction(visible=AnnotationConstants.FALSE)
182: public void refresh() {
183: loadClasses();
184: ObjectContext.getInstance()
185: .refresh(this , "availableClassNames");
186: ObjectContext.getInstance().refresh(this , "search");
187: }
188:
189: @ViewAction(visible=AnnotationConstants.FALSE)
190: public void clean() {
191: loadClasses();
192: selectedAvailableClass = null;
193: search = null;
194:
195: ObjectContext.getInstance().refresh(this ,
196: "selectedAvailableClassNames");
197: ObjectContext.getInstance()
198: .refresh(this , "availableClassNames");
199: ObjectContext.getInstance().refresh(this , "search");
200: }
201:
202: public boolean isApplicationDomainOnly() {
203: return applicationDomainOnly;
204: }
205:
206: public void setApplicationDomainOnly(boolean applicationDomainOnly) {
207: this.applicationDomainOnly = applicationDomainOnly;
208: loadClasses();
209: ObjectContext.getInstance().show(this);
210: }
211:
212: }
|