001: /*
002: * JFolder, Copyright 2001-2006 Gary Steinmetz
003: *
004: * Distributable under LGPL license.
005: * See terms of license at gnu.org.
006: */
007:
008: package org.jfolder.common.function.v1;
009:
010: //base classes
011:
012: //project specific classes
013: import org.jfolder.common.SelfArgumentlessConstructor;
014: import org.jfolder.common.StandardDataTypes;
015: import org.jfolder.common.UnexpectedSystemException;
016: import org.jfolder.common.function.BaseCommonFunctionCompatibilityTag;
017: import org.jfolder.common.function.WebPageTagInstanceViewContext;
018: import org.jfolder.common.function.WebPageTagInstanceViewContextInfo;
019: import org.jfolder.common.tagging.AppraiseConceptTagContext;
020: import org.jfolder.common.tagging.ConceptTagCallContext;
021: import org.jfolder.common.tagging.ConceptTagCharacteristic;
022: import org.jfolder.common.tagging.ConceptTagConstraint;
023: import org.jfolder.common.tagging.ConceptTagConstraintHolder;
024: import org.jfolder.common.tagging.ConceptTagFlagsHelper;
025: import org.jfolder.common.tagging.DetermineClassConceptTagContext;
026: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagContext;
027: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagException;
028: import org.jfolder.common.tagging.DynamicConceptTagConstraintContext;
029: import org.jfolder.common.tagging.InitializeConceptTagContext;
030: import org.jfolder.common.tagging.SelectionCriteriaForReturnableConceptTag;
031: import org.jfolder.common.tagging.StaticConceptTagConstraintContext;
032: import org.jfolder.common.tagging.StudioConceptTagCreParInfoContext;
033: import org.jfolder.common.tagging.StudioConceptTagInstanceInfoContext;
034: import org.jfolder.common.tagging.StudioConceptTagTypeInfoContext;
035: import org.jfolder.common.tagging.ValueAndClassForConceptTag;
036: import org.jfolder.common.utils.misc.CommonExpressions;
037:
038: //other classes
039:
040: public class CommonFunctionLogStructWhileDoTag extends
041: BaseCommonFunctionCompatibilityTag implements
042: SelfArgumentlessConstructor {
043:
044: //
045: //characteristics
046: //
047: private ConceptTagCharacteristic conditionCtchar = null;
048: private ConceptTagCharacteristic actionCtchar = null;
049: private ConceptTagCharacteristic orderCtchar = null;
050: //
051: //condition details
052: private final static String CONDITION_CTCON = "condition";
053: private final static String CONDITION_TITLE = "Condition";
054: private final static String CONDITION_SHORT_DESCRIPTION = "Condition";
055: //
056: //action details
057: private final static String ACTION_CTCON = "action";
058: private final static String ACTION_TITLE = "Action";
059: private final static String ACTION_SHORT_DESCRIPTION = "Action";
060: //
061: //order details
062: private final static String ORDER_CTCON = "order";
063: private final static String ORDER_TITLE = "Order";
064: private final static String ORDER_SHORT_DESCRIPTION = "Order";
065:
066: public void initialize(InitializeConceptTagContext inIctc) {
067: //
068: //
069: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
070: .newInstance(inIctc);
071:
072: //
073: //constrain "condition"
074: ConceptTagConstraint conditionCtcon = ConceptTagConstraint
075: .newInstance(CONDITION_CTCON, rootCtconh);
076: conditionCtcon.setTitle(CONDITION_TITLE);
077: conditionCtcon.setShortDescription(CONDITION_SHORT_DESCRIPTION);
078: //
079: conditionCtcon.setMinimumLength(1);
080: conditionCtcon.setMaximumLength(1);
081: //
082: DynamicConceptTagConstraintContext conditionDctcc = DynamicConceptTagConstraintContext
083: .newInstance(conditionCtcon);
084: conditionDctcc.getValidator().allowReturnOfOnlyBoolean();
085: conditionDctcc.getValidator().filterDirectChildOfRootAndHtml();
086:
087: //
088: //constrain "action"
089: ConceptTagConstraint actionCtcon = ConceptTagConstraint
090: .newInstance(ACTION_CTCON, rootCtconh);
091: actionCtcon.setTitle(ACTION_TITLE);
092: actionCtcon.setShortDescription(ACTION_SHORT_DESCRIPTION);
093: //
094: actionCtcon.inheritFromParent(inIctc);
095:
096: //
097: //constrain "order"
098: ConceptTagConstraint orderCtcon = ConceptTagConstraint
099: .newInstance(ORDER_CTCON, rootCtconh);
100: orderCtcon.setTitle(ORDER_TITLE);
101: orderCtcon.setShortDescription(ORDER_SHORT_DESCRIPTION);
102: //
103: orderCtcon.setMinimumLength(1);
104: orderCtcon.setMaximumLength(1);
105: //
106: StaticConceptTagConstraintContext orderSctcc = StaticConceptTagConstraintContext
107: .newInstance(orderCtcon);
108: orderSctcc.setEntrySetExclusive(true);
109: orderSctcc.registerEntry("Process Condition Before Action",
110: true + "");
111: orderSctcc.registerEntry("Process Action Before Condition",
112: false + "");
113: //
114: orderSctcc.addDefaultValue(true + "");
115:
116: //
117: inIctc.initialize();
118:
119: //initialize characteristics
120: this .conditionCtchar = conditionCtcon.getCharacteristic();
121: this .actionCtchar = actionCtcon.getCharacteristic();
122: this .orderCtchar = orderCtcon.getCharacteristic();
123: }
124:
125: public void appraise(AppraiseConceptTagContext inActc) {
126:
127: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
128:
129: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
130:
131: sctiic.setInstanceTitle("While Do");
132: sctiic.setInstanceDescription("While Do");
133: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
134:
135: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
136:
137: scttic.setTypeTitle("While Do");
138: scttic.setTypeDescription("While Do");
139: } else if (inActc instanceof WebPageTagInstanceViewContext) {
140:
141: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
142: //
143: //
144: boolean conditionBeforeAction = true;
145: if (this .conditionCtchar.getValueLength() > 0
146: && this .conditionCtchar.isStatic(0, wptivc)) {
147: //
148: String conBefActText = this .conditionCtchar
149: .getValueAsString(0, wptivc);
150: conditionBeforeAction = (new Boolean(conBefActText))
151: .booleanValue();
152: //
153: }
154: //
155: //
156: WebPageTagInstanceViewContextInfo info = wptivc
157: .getInfoAsIterativeNonHtml();
158: //
159: WebPageTagInstanceViewContextInfo whileDoStartInfo[] = new WebPageTagInstanceViewContextInfo[1];
160: WebPageTagInstanceViewContextInfo whileDoMiddleInfo[] = new WebPageTagInstanceViewContextInfo[1];
161: WebPageTagInstanceViewContextInfo whileDoEndInfo[] = new WebPageTagInstanceViewContextInfo[1];
162: info.createIterativeSubParts(whileDoStartInfo,
163: whileDoMiddleInfo, whileDoEndInfo);
164: //
165: //
166: //start
167: if (conditionBeforeAction) {
168: //
169: (whileDoStartInfo[0]).setNonHtmlContent("while(", ")");
170: //
171: if (this .conditionCtchar.getValueLength() > 0) {
172: WebPageTagInstanceViewContext.displayView(
173: this .conditionCtchar, whileDoStartInfo[0],
174: wptivc);
175: } else {
176: WebPageTagInstanceViewContextInfo emptyConditionInfo = (whileDoStartInfo[0])
177: .createNonHtmlInfo(CONDITION_CTCON);
178: emptyConditionInfo
179: .setNonHtmlContent("No Condition - Click Here To Create");
180: }
181: } else {
182: (whileDoStartInfo[0]).setNonHtmlContent("do {");
183: }
184: //
185: //
186: //middle
187: if (this .actionCtchar.getValueLength() > 0) {
188: //
189: WebPageTagInstanceViewContext
190: .displayView(this .actionCtchar,
191: whileDoMiddleInfo[0], wptivc);
192: } else {
193: WebPageTagInstanceViewContextInfo emptyActionInfo = (whileDoMiddleInfo[0])
194: .createNonHtmlInfo(ACTION_CTCON);
195: emptyActionInfo
196: .setNonHtmlContent("No Action - Click Here To Create");
197: }
198: //
199: //
200: //end
201: if (conditionBeforeAction) {
202: (whileDoEndInfo[0]).setNonHtmlContent("}");
203: } else {
204: //
205: (whileDoEndInfo[0]).setNonHtmlContent("} while(", ")");
206: //
207: if (this .conditionCtchar.getValueLength() > 0) {
208: WebPageTagInstanceViewContext.displayView(
209: this .conditionCtchar, whileDoEndInfo[0],
210: wptivc);
211: } else {
212: WebPageTagInstanceViewContextInfo emptyConditionInfo = (whileDoEndInfo[0])
213: .createNonHtmlInfo(CONDITION_CTCON);
214: emptyConditionInfo
215: .setNonHtmlContent("No Condition - Click Here To Create");
216: }
217: }
218:
219: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
220:
221: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
222:
223: scfrct.canReturnNothing();
224: scfrct.declareFormatAsInherit();
225: ConceptTagFlagsHelper.assertCanBeIterativeStructure(scfrct);
226: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
227:
228: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
229: }
230: }
231:
232: public void determineValueAndClass(
233: DetermineValueAndClassConceptTagContext inDvacctc) {
234: //
235: try {
236: //
237: String orderText = this .orderCtchar.getValueAsString(0,
238: inDvacctc);
239: boolean blockCondition = !(new Boolean(orderText))
240: .booleanValue();
241: //
242: while (true && !ConceptTagFlagsHelper
243: .isBreakActive(inDvacctc)) {
244: //
245: //
246: boolean conditionResult = false;
247: if (!blockCondition) {
248: //
249: ValueAndClassForConceptTag conditionVacfct = this .conditionCtchar
250: .getDetermineValueAndClass(0, inDvacctc);
251: //
252: Object conResultObj = conditionVacfct.getValue();
253: conditionResult = ((Boolean) conResultObj)
254: .booleanValue();
255: }
256: //
257: //
258: if (blockCondition || conditionResult) {
259: blockCondition = false;
260: //
261: this .actionCtchar
262: .processIterativeStructure(inDvacctc);
263: ConceptTagFlagsHelper
264: .removeIterativeLocalVariables(inDvacctc);
265: //int icount = this.actionCtchar.getValueLength();
266: //for (int i = 0; i < icount; i++) {
267: // this.actionCtchar.getDetermineValueAndClass(
268: // i, inDvacctc);
269: //}
270: } else {
271: break;
272: }
273: }
274: //
275: //
276: inDvacctc
277: .setDetermineValueAndClass(ValueAndClassForConceptTag
278: .newNothing());
279: } catch (DetermineValueAndClassConceptTagException dvaccte) {
280: inDvacctc.setDetermineException(dvaccte);
281: }
282: }
283:
284: public void determineClass(DetermineClassConceptTagContext inDcctc) {
285: //
286: inDcctc.setDetermineClass(StandardDataTypes.getNothingClass());
287: }
288:
289: public Object createUninitializedSelf() {
290: return new CommonFunctionLogStructWhileDoTag();
291: }
292: }
|