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: import java.util.ArrayList;
012: import java.util.HashMap;
013:
014: //project specific classes
015: import org.jfolder.common.SelfArgumentlessConstructor;
016: import org.jfolder.common.StandardDataTypes;
017: import org.jfolder.common.UnexpectedSystemException;
018: import org.jfolder.common.function.BaseCommonFunctionCompatibilityTag;
019: import org.jfolder.common.function.WebPageTagInstanceViewContext;
020: import org.jfolder.common.function.WebPageTagInstanceViewContextInfo;
021: import org.jfolder.common.tagging.AppraiseConceptTagContext;
022: import org.jfolder.common.tagging.ConceptTagCharacteristic;
023: import org.jfolder.common.tagging.ConceptTagConstraint;
024: import org.jfolder.common.tagging.ConceptTagConstraintHolder;
025: import org.jfolder.common.tagging.ConceptTagFlagsHelper;
026: import org.jfolder.common.tagging.ConceptTagHelper;
027: import org.jfolder.common.tagging.ConceptTagMessageHolder;
028: import org.jfolder.common.tagging.DetermineClassConceptTagContext;
029: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagContext;
030: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagException;
031: import org.jfolder.common.tagging.DynamicConceptTagConstraintContext;
032: import org.jfolder.common.tagging.InitializeConceptTagContext;
033: import org.jfolder.common.tagging.SelectionCriteriaForReturnableConceptTag;
034: import org.jfolder.common.tagging.StaticConceptTagConstraintContext;
035: import org.jfolder.common.tagging.StudioConceptTagCreParInfoContext;
036: import org.jfolder.common.tagging.StudioConceptTagInstanceInfoContext;
037: import org.jfolder.common.tagging.StudioConceptTagTypeInfoContext;
038: import org.jfolder.common.tagging.ValueAndClassForConceptTag;
039:
040: //other classes
041:
042: public class CommonFunctionVarSetVarValueTag extends
043: BaseCommonFunctionCompatibilityTag implements
044: SelfArgumentlessConstructor {
045:
046: //
047: //characteristics
048: private ConceptTagCharacteristic nameCtchar = null;
049: private ConceptTagCharacteristic valueCtchar = null;
050:
051: //name details
052: private final static String NAME_CTCON = "name";
053: private final static String NAME_TITLE = "Name";
054: private final static String NAME_SHORT_DESCRIPTION = "Name of variable";
055:
056: //value details
057: private final static String VALUE_CTCON = "value";
058: private final static String VALUE_TITLE = "Value";
059: private final static String VALUE_SHORT_DESCRIPTION = "Update value";
060:
061: public void initialize(InitializeConceptTagContext inIctc) {
062: //
063:
064: //
065: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
066: .newInstance(inIctc);
067:
068: //constrain "name"
069: ConceptTagConstraint nameCtcon = ConceptTagConstraint
070: .newInstance(NAME_CTCON, rootCtconh);
071: //
072: nameCtcon.setMinimumLength(1);
073: nameCtcon.setMaximumLength(1);
074: //
075: nameCtcon.setTitle(NAME_TITLE);
076: nameCtcon.setShortDescription(NAME_SHORT_DESCRIPTION);
077: //
078: StaticConceptTagConstraintContext nameSctcc = StaticConceptTagConstraintContext
079: .newInstance(nameCtcon);
080: nameSctcc.setEntrySetExclusive(true);
081: ArrayList varNames = ConceptTagFlagsHelper
082: .getAllVariableNames(inIctc);
083: if (varNames.size() > 0) {
084: for (int i = 0; i < varNames.size(); i++) {
085: String nextVarName = ((String) varNames.get(i));
086: if (i == 0) {
087: nameSctcc.addDefaultValue(nextVarName);
088: }
089: nameSctcc.registerEntry(nextVarName, nextVarName);
090: }
091: } else {
092: nameSctcc.addDefaultValue("LocalVariable1");
093: }
094:
095: //constraint "value"
096: ConceptTagConstraint valueCtcon = ConceptTagConstraint
097: .newInstance(VALUE_CTCON, rootCtconh);
098: //
099: valueCtcon.setMinimumLength(1);
100: valueCtcon.setMaximumLength(1);
101: //
102: valueCtcon.setTitle(VALUE_TITLE);
103: valueCtcon.setShortDescription(VALUE_SHORT_DESCRIPTION);
104: //
105: //StaticConceptTagConstraintContext valueSctcc =
106: // StaticConceptTagConstraintContext.newInstance(valueCtcon);
107: //
108: //DynamicConceptTagConstraintContext valueDctcc =
109: // DynamicConceptTagConstraintContext.newInstance(valueCtcon);
110: //valueDctcc.getValidator().filterDirectChildOfRootAndHtml();
111: //
112: PreConstraintValidatorForVarValueOnly valuePcvfvvo = PreConstraintValidatorForVarValueOnly
113: .newInstance(nameCtcon, valueCtcon);
114: //
115: valueCtcon.registerPreValidator(valuePcvfvvo);
116:
117: //
118: ConceptTagFlagsHelper
119: .pushNonIterativeCommonFunctionDepth(inIctc);
120: inIctc.initialize();
121: ConceptTagFlagsHelper
122: .popNonIterativeCommonFunctionDepth(inIctc);
123:
124: //initialize characteristics
125: this .nameCtchar = nameCtcon.getCharacteristic();
126: this .valueCtchar = valueCtcon.getCharacteristic();
127:
128: //
129: ConceptTagMessageHolder nameCtmh = this .nameCtchar
130: .getParentMessageHolder();
131: if (!nameCtmh.isErrorPresent()) {
132: String name = this .nameCtchar.getValueAsString(0, inIctc);
133: if (!ConceptTagFlagsHelper.isGlobalOrLocalVariablePresent(
134: inIctc, name)) {
135: //
136: nameCtmh
137: .addErrorHeaderMessage("There is no global or local variable named '"
138: + name + "'");
139: }
140: }
141: }
142:
143: public void appraise(AppraiseConceptTagContext inActc) {
144:
145: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
146:
147: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
148:
149: sctiic.setInstanceTitle("Set Variable Value");
150: sctiic.setInstanceDescription("Set Variable Value");
151: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
152:
153: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
154:
155: scttic.setTypeTitle("Set Variable Value");
156: scttic.setTypeDescription("Set Variable Value");
157: } else if (inActc instanceof WebPageTagInstanceViewContext) {
158:
159: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
160:
161: WebPageTagInstanceViewContextInfo info = wptivc
162: .getInfoAsNonHtml();
163: //
164: WebPageTagInstanceViewContextInfo nameInfo = info
165: .createNonHtmlInfo();
166: nameInfo.setNonHtmlContent("Var(", ") = ");
167: WebPageTagInstanceViewContext.displayView(this .nameCtchar,
168: nameInfo, wptivc, "???");
169: //nameInfo.setEndContent(") = ");
170: //
171: //
172: WebPageTagInstanceViewContextInfo valueInfo = info
173: .createNonHtmlInfo();
174: WebPageTagInstanceViewContext.displayView(this .valueCtchar,
175: valueInfo, wptivc, "???");
176: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
177:
178: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
179:
180: scfrct.canReturnNothing();
181: scfrct.declareFormatAsPlain();
182: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
183:
184: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
185: }
186: }
187:
188: public void determineValueAndClass(
189: DetermineValueAndClassConceptTagContext inDvacctc) {
190: //
191: //ValueAndClassForConceptTag vac = null;
192: //
193: //ConceptTagFlagsHelper.showCurrentVariables(
194: // inDvacctc, "CommFuncV1VarGetVarValTag about to get variable");
195:
196: try {
197: String name = this .nameCtchar
198: .getValueAsString(0, inDvacctc);
199: //
200: if (ConceptTagFlagsHelper.isGlobalVariablePresent(
201: inDvacctc, name)) {
202: //
203: ValueAndClassForConceptTag vac = ConceptTagFlagsHelper
204: .accessGlobalVariable(inDvacctc, name);
205: //
206: String type = StandardDataTypes.getDisplayName(vac
207: .getValueClass());
208: //
209: Object currValue = ConceptTagHelper
210: .getStandardValueFromChar(this .valueCtchar,
211: type, 0, inDvacctc);
212: //
213: ConceptTagFlagsHelper.updateGlobalVariable(inDvacctc,
214: name, ValueAndClassForConceptTag.newInstance(
215: currValue, vac.getValueClass()));
216: } else if (ConceptTagFlagsHelper.isLocalVariablePresent(
217: inDvacctc, name)) {
218: //
219: ValueAndClassForConceptTag vac = ConceptTagFlagsHelper
220: .accessLocalVariable(inDvacctc, name);
221: //
222: String type = StandardDataTypes.getDisplayName(vac
223: .getValueClass());
224: //
225: Object currValue = ConceptTagHelper
226: .getStandardValueFromChar(this .valueCtchar,
227: type, 0, inDvacctc);
228: //
229: ConceptTagFlagsHelper.updateLocalVariable(inDvacctc,
230: name, ValueAndClassForConceptTag.newInstance(
231: currValue, vac.getValueClass()));
232: } else {
233: throw UnexpectedSystemException.unknownState();
234: }
235:
236: inDvacctc
237: .setDetermineValueAndClass(ValueAndClassForConceptTag
238: .newNothing());
239: } catch (DetermineValueAndClassConceptTagException dvaccte) {
240: inDvacctc.setDetermineException(dvaccte);
241: }
242: }
243:
244: public void determineClass(DetermineClassConceptTagContext inDcctc) {
245: //
246: //Class c = StandardDataTypes.getAnyClass();
247: //if (this.nameCtchar.getValueLength() > 0
248: // && this.nameCtchar.isStatic(0)) {
249: // //
250: // String name = this.nameCtchar.getValueAsString(0);
251: // if (ConceptTagFlagsHelper.isGlobalVariablePresent(
252: // inDcctc, name)) {
253: // //
254: // ValueAndClassForConceptTag vac =
255: // ConceptTagFlagsHelper.accessGlobalVariable(inDcctc, name);
256: // c = vac.getValueClass();
257: // }
258: // else if (ConceptTagFlagsHelper.isLocalVariablePresent(
259: // inDcctc, name)) {
260: // //
261: // ValueAndClassForConceptTag vac =
262: // ConceptTagFlagsHelper.accessLocalVariable(inDcctc, name);
263: // c = vac.getValueClass();
264: // }
265: //}
266: inDcctc.setDetermineClass(StandardDataTypes.getNothingClass());
267: }
268:
269: public Object createUninitializedSelf() {
270: return new CommonFunctionVarSetVarValueTag();
271: }
272: }
|