001: package org.romaframework.module.designer.view.domain.radpage;
002:
003: import java.util.ArrayList;
004: import java.util.List;
005: import java.util.Set;
006: import org.apache.xmlbeans.XmlObject;
007: import org.romaframework.aspect.core.annotation.AnnotationConstants;
008: import org.romaframework.aspect.view.ViewAspect;
009: import org.romaframework.aspect.view.annotation.ViewField;
010: import org.romaframework.aspect.view.echo2.area.AreaInstance;
011: import org.romaframework.aspect.view.feature.ViewClassFeatures;
012: import org.romaframework.core.schema.SchemaAction;
013: import org.romaframework.core.schema.SchemaClassDefinition;
014: import org.romaframework.core.schema.SchemaField;
015: import org.romaframework.core.schema.SchemaObject;
016: import org.romaframework.core.serializer.RomaSerializationException;
017: import org.romaframework.core.serializer.RomaSerializerComponent;
018: import org.romaframework.module.designer.domain.RadAction;
019: import org.romaframework.module.designer.domain.RadClass;
020: import org.romaframework.module.designer.domain.RadField;
021: import org.romaframework.module.designer.view.domain.radpage.aspect.AspectsPage;
022: import org.romaframework.module.designer.view.domain.radpage.aspect.ChildPage;
023: import org.romaframework.module.designer.view.domain.radpage.aspect.CoreAspectPage;
024: import org.romaframework.module.designer.view.domain.radpage.aspect.ViewAspectPage;
025: import org.romaframework.xml.config.XmlConfigClassType;
026:
027: public abstract class ClassAspectsPage extends AspectsPage {
028: @ViewField(visible=AnnotationConstants.FALSE)
029: protected SchemaObject result;
030: protected RadClassPage clazz;
031: protected CoreAspectPage coreAspectPage;
032: protected AreaInstance areaInstance;
033:
034: public ClassAspectsPage(RadClass radClazz)
035: throws RomaSerializationException {
036: super ();
037: RadClassPage clazzPage = new RadClassPage(radClazz);
038: clazz = clazzPage;
039: clazzPage.setContainer(this );
040: // TODO Search for <AspectName>Class<AspectPage> and add them dinamically
041: addPage(clazzPage);
042: // CoreAspect
043: SchemaObject schemaObject = (SchemaObject) radClass()
044: .getSchemaFeatures();
045: Set<RadField> fieldsSet = radClass().getFields();
046: coreAspectPage = new CoreAspectPage(schemaObject, fieldsSet,
047: radClass().getActions());
048: addPage(coreAspectPage);
049: addRegisteredAspects(radClazz.getSchemaFeatures());
050:
051: }
052:
053: private RadClass radClass() {
054: return clazz.getEntity();
055: }
056:
057: @Override
058: public String toString() {
059: return "Class: " + radClass().getName();
060: }
061:
062: @Override
063: public void ok() throws Exception {
064: for (ChildPage page : pages) {
065: page.apply();
066: if (page instanceof ViewAspectPage) {
067: // TODO This must be changed
068: areaInstance = ((ViewAspectPage) page).getRootArea();
069: }
070: }
071: setElementsOrder();
072: result = (SchemaObject) radClass().getSchemaFeatures();
073: }
074:
075: private void setElementsOrder() {
076: radClass().getFields().clear();
077: radClass().getFields()
078: .addAll(coreAspectPage.getOrderedFields());
079: radClass().getActions().clear();
080: radClass().getActions().addAll(
081: coreAspectPage.getOrderedActions());
082: List<SchemaField> fields = new ArrayList<SchemaField>();
083: List<SchemaAction> actions = new ArrayList<SchemaAction>();
084: for (RadField field : radClass().getFields()) {
085: fields.add((SchemaField) field.getSchemaFeatures());
086: }
087: for (RadAction field : radClass().getActions()) {
088: actions.add((SchemaAction) field.getSchemaFeatures());
089: }
090: radClass().getSchemaFeatures().setFeature(
091: ViewAspect.ASPECT_NAME,
092: ViewClassFeatures.EXPLICIT_ELEMENTS, Boolean.FALSE);
093: ((SchemaClassDefinition) radClass().getSchemaFeatures())
094: .setOrderFields(fields);
095: ((SchemaClassDefinition) radClass().getSchemaFeatures())
096: .setOrderActions(actions);
097: }
098:
099: @Override
100: public void cancel() throws Exception {
101: result = null;
102: }
103:
104: public SchemaObject getResult() {
105: return result;
106: }
107:
108: protected XmlObject serializeMyComponent()
109: throws RomaSerializationException {
110: XmlConfigClassType config = (XmlConfigClassType) RomaSerializerComponent
111: .getInstance()
112: .serialize(radClass().getSchemaFeatures());
113: if (areaInstance != null) {
114: XmlObject area = RomaSerializerComponent.getInstance()
115: .serialize(areaInstance);
116: config.getAspects().getView().addNewForm().addNewArea()
117: .set(area);
118: }
119: return config;
120: }
121: }
|