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 CommonFunctionListRemoveValueTag extends
044: BaseCommonFunctionCompatibilityTag implements
045: SelfArgumentlessConstructor {
046:
047: //characteristics
048: private ConceptTagCharacteristic listCtchar = null;
049: private ConceptTagCharacteristic indexCtchar = null;
050:
051: //list details
052: private final static String LIST_CTCON = "list";
053: private final static String LIST_TITLE = "List";
054: private final static String LIST_SHORT_DESCRIPTION = "List";
055: //
056: private final static String INDEX_CTCON = "index";
057: private final static String INDEX_TITLE = "Index";
058: private final static String INDEX_SHORT_DESCRIPTION = "Index";
059:
060: public void initialize(InitializeConceptTagContext inIctc) {
061:
062: //
063: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
064: .newInstance(inIctc);
065:
066: //constrain "list"
067: ConceptTagConstraint listCtcon = ConceptTagConstraint
068: .newInstance(LIST_CTCON, rootCtconh);
069: //
070: listCtcon.setTitle(LIST_TITLE);
071: listCtcon.setShortDescription(LIST_SHORT_DESCRIPTION);
072: //
073: //
074: listCtcon.setMinimumLength(1);
075: listCtcon.setMaximumLength(1);
076: //
077: DynamicConceptTagConstraintContext listDctcc = DynamicConceptTagConstraintContext
078: .newInstance(listCtcon);
079: listDctcc.getValidator().allowReturnOfOnlyList();
080: listDctcc.getValidator().filterDirectChildOfRootAndHtml();
081: //
082:
083: //constrain "index"
084: ConceptTagConstraint indexCtcon = ConceptTagConstraint
085: .newInstance(INDEX_CTCON, rootCtconh);
086: //
087: indexCtcon.setTitle(INDEX_TITLE);
088: indexCtcon.setShortDescription(INDEX_SHORT_DESCRIPTION);
089: //
090: //
091: indexCtcon.setMinimumLength(1);
092: indexCtcon.setMaximumLength(1);
093: //
094: DynamicConceptTagConstraintContext indexDctcc = DynamicConceptTagConstraintContext
095: .newInstance(indexCtcon);
096: indexDctcc.getValidator().allowReturnOfOnlyList();
097: indexDctcc.getValidator().filterDirectChildOfRootAndHtml();
098: //
099: StaticConceptTagConstraintContext indexSctcc = StaticConceptTagConstraintContext
100: .newInstance(indexCtcon);
101: indexSctcc.setRegularExpression(
102: CommonExpressions.NON_NEGATIVE_INTEGER,
103: "Value must be non-negative integer");
104:
105: //
106: ConceptTagFlagsHelper
107: .pushNonIterativeCommonFunctionDepth(inIctc);
108: inIctc.initialize();
109: ConceptTagFlagsHelper
110: .popNonIterativeCommonFunctionDepth(inIctc);
111:
112: //initialize characteristics
113: this .listCtchar = listCtcon.getCharacteristic();
114: this .indexCtchar = indexCtcon.getCharacteristic();
115: }
116:
117: public void appraise(AppraiseConceptTagContext inActc) {
118:
119: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
120:
121: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
122:
123: //
124: sctiic.setInstanceTitle("Remove List Value");
125: sctiic.setInstanceDescription("Remove List Value");
126: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
127:
128: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
129:
130: scttic.setTypeTitle("Remove List Value");
131: scttic.setTypeDescription("Remove List Value");
132: } else if (inActc instanceof WebPageTagInstanceViewContext) {
133:
134: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
135:
136: WebPageTagInstanceViewContextInfo info = wptivc
137: .getInfoAsNonHtml();
138:
139: //
140: //
141: WebPageTagInstanceViewContextInfo removeInfo = info
142: .createNonHtmlInfo();
143: removeInfo.setNonHtmlContent("Remove Value At Index (");
144: WebPageTagInstanceViewContext.displayView(this .indexCtchar,
145: removeInfo, wptivc, "???");
146: //
147: //
148: WebPageTagInstanceViewContextInfo fromInfo = info
149: .createNonHtmlInfo();
150: fromInfo.setNonHtmlContent(") From (", ")");
151: WebPageTagInstanceViewContext.displayView(this .listCtchar,
152: fromInfo, wptivc, "???");
153: //fromInfo.setEndContent(")");
154: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
155:
156: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
157:
158: scfrct.canReturnNothing();
159: scfrct.declareFormatAsPlain();
160: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
161:
162: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
163: }
164: }
165:
166: public void determineValueAndClass(
167: DetermineValueAndClassConceptTagContext inDvacctc) {
168:
169: try {
170: ValueAndClassForConceptTag listVacfct = this .listCtchar
171: .getDetermineValueAndClass(0, inDvacctc);
172:
173: Object index = null;
174: if (this .indexCtchar.isStatic(0, inDvacctc)) {
175: //
176: index = StandardDataTypes
177: .getDecimalInstance(this .indexCtchar
178: .getValueAsString(0, inDvacctc));
179: } else {
180: ValueAndClassForConceptTag indexVacfct = this .indexCtchar
181: .getDetermineValueAndClass(0, inDvacctc);
182: //
183: index = indexVacfct.getValue();
184: }
185: //BigDecimal bd = StandardDataTypes.getListLength(
186: // listVacfct.getValue());
187:
188: StandardDataTypes.removeListValue(listVacfct.getValue(),
189: index);
190:
191: inDvacctc
192: .setDetermineValueAndClass(ValueAndClassForConceptTag
193: .newNothing());
194: } catch (DetermineValueAndClassConceptTagException dvaccte) {
195: inDvacctc.setDetermineException(dvaccte);
196: }
197: }
198:
199: public void determineClass(DetermineClassConceptTagContext inDcctc) {
200: inDcctc.setDetermineClass(StandardDataTypes.getNothingClass());
201: }
202:
203: public Object createUninitializedSelf() {
204: return new CommonFunctionListRemoveValueTag();
205: }
206:
207: }
|