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.ConceptTag;
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.ConceptTagHelper;
026: import org.jfolder.common.tagging.DetermineClassConceptTagContext;
027: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagContext;
028: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagException;
029: import org.jfolder.common.tagging.DynamicConceptTagConstraintContext;
030: import org.jfolder.common.tagging.InitializeConceptTagContext;
031: import org.jfolder.common.tagging.ReturnableConceptTag;
032: import org.jfolder.common.tagging.SelectionCriteriaForReturnableConceptTag;
033: import org.jfolder.common.tagging.StaticConceptTagConstraintContext;
034: import org.jfolder.common.tagging.StudioConceptTagCreParInfoContext;
035: import org.jfolder.common.tagging.StudioConceptTagInstanceInfoContext;
036: import org.jfolder.common.tagging.StudioConceptTagTypeInfoContext;
037: import org.jfolder.common.tagging.ValueAndClassForConceptTag;
038: import org.jfolder.common.utils.misc.CommonExpressions;
039: import org.jfolder.common.utils.misc.MiscHelper;
040:
041: //other classes
042:
043: public class CommonFunctionListGetLengthTag extends
044: BaseCommonFunctionCompatibilityTag implements
045: SelfArgumentlessConstructor {
046:
047: //characteristics
048: private ConceptTagCharacteristic listCtchar = null;
049:
050: //list details
051: private final static String LIST_CTCON = "list";
052: private final static String LIST_TITLE = "List";
053: private final static String LIST_SHORT_DESCRIPTION = "List";
054:
055: public void initialize(InitializeConceptTagContext inIctc) {
056:
057: //
058: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
059: .newInstance(inIctc);
060:
061: //constrain "list"
062: ConceptTagConstraint listCtcon = ConceptTagConstraint
063: .newInstance(LIST_CTCON, rootCtconh);
064: //
065: listCtcon.setTitle(LIST_TITLE);
066: listCtcon.setShortDescription(LIST_SHORT_DESCRIPTION);
067: //
068: //
069: listCtcon.setMinimumLength(1);
070: listCtcon.setMaximumLength(1);
071: //
072: DynamicConceptTagConstraintContext listDctcc = DynamicConceptTagConstraintContext
073: .newInstance(listCtcon);
074: listDctcc.getValidator().allowReturnOfOnlyList();
075: listDctcc.getValidator().filterDirectChildOfRootAndHtml();
076: //
077:
078: //
079: ConceptTagFlagsHelper
080: .pushNonIterativeCommonFunctionDepth(inIctc);
081: inIctc.initialize();
082: ConceptTagFlagsHelper
083: .popNonIterativeCommonFunctionDepth(inIctc);
084:
085: //initialize characteristics
086: this .listCtchar = listCtcon.getCharacteristic();
087: }
088:
089: public void appraise(AppraiseConceptTagContext inActc) {
090:
091: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
092:
093: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
094:
095: //
096: sctiic.setInstanceTitle("Get List Length");
097: sctiic.setInstanceDescription("Get List Length");
098: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
099:
100: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
101:
102: scttic.setTypeTitle("Get List Length");
103: scttic.setTypeDescription("Get List Length");
104: } else if (inActc instanceof WebPageTagInstanceViewContext) {
105:
106: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
107:
108: WebPageTagInstanceViewContextInfo info = wptivc
109: .getInfoAsNonHtml();
110:
111: info.setNonHtmlContent("GetListLengthOf(", ")");
112: WebPageTagInstanceViewContext.displayView(this .listCtchar,
113: info, wptivc, "???");
114: //info.setEndContent(")");
115: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
116:
117: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
118:
119: scfrct.canReturnDecimal();
120: scfrct.declareFormatAsPlain();
121: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
122:
123: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
124: }
125: }
126:
127: public void determineValueAndClass(
128: DetermineValueAndClassConceptTagContext inDvacctc) {
129:
130: try {
131: ValueAndClassForConceptTag vacfct = null;
132:
133: ValueAndClassForConceptTag listVacfct = this .listCtchar
134: .getDetermineValueAndClass(0, inDvacctc);
135:
136: Object bd = StandardDataTypes.getListLength(listVacfct
137: .getValue());
138:
139: vacfct = ValueAndClassForConceptTag.newInstance(bd,
140: StandardDataTypes.getDecimalClass());
141:
142: inDvacctc.setDetermineValueAndClass(vacfct);
143: } catch (DetermineValueAndClassConceptTagException dvaccte) {
144: inDvacctc.setDetermineException(dvaccte);
145: }
146: }
147:
148: public void determineClass(DetermineClassConceptTagContext inDcctc) {
149: inDcctc.setDetermineClass(StandardDataTypes.getDecimalClass());
150: }
151:
152: public Object createUninitializedSelf() {
153: return new CommonFunctionListGetLengthTag();
154: }
155:
156: }
|