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.ConceptTagCharacteristic;
021: import org.jfolder.common.tagging.ConceptTagConstraint;
022: import org.jfolder.common.tagging.ConceptTagConstraintHolder;
023: import org.jfolder.common.tagging.ConceptTagFlagsHelper;
024: import org.jfolder.common.tagging.ConceptTagHelper;
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.ReturnableConceptTag;
031: import org.jfolder.common.tagging.SelectionCriteriaForReturnableConceptTag;
032: import org.jfolder.common.tagging.StaticConceptTagConstraintContext;
033: import org.jfolder.common.tagging.StudioConceptTagCreParInfoContext;
034: import org.jfolder.common.tagging.StudioConceptTagInstanceInfoContext;
035: import org.jfolder.common.tagging.StudioConceptTagTypeInfoContext;
036: import org.jfolder.common.tagging.ValueAndClassForConceptTag;
037: import org.jfolder.common.utils.misc.CommonExpressions;
038: import org.jfolder.common.utils.misc.MiscHelper;
039:
040: //other classes
041:
042: public class CommonFunctionStrConcatenateTag extends
043: BaseCommonFunctionCompatibilityTag implements
044: SelfArgumentlessConstructor {
045:
046: //characteristics
047: private ConceptTagCharacteristic operandCtchar = null;
048:
049: //operand details
050: private final static String OPERAND_CTCON = "operand";
051: private final static String OPERAND_TITLE = "Operands";
052: private final static String OPERAND_SHORT_DESCRIPTION = "The values to be concatenated";
053:
054: public void initialize(InitializeConceptTagContext inIctc) {
055:
056: //
057: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
058: .newInstance(inIctc);
059:
060: //constrain operand
061: ConceptTagConstraint operandCtcon = ConceptTagConstraint
062: .newInstance(OPERAND_CTCON, rootCtconh);
063: operandCtcon.setMinimumLength(2);
064: operandCtcon.setLengthUnbounded(true);
065: operandCtcon.setTitle(OPERAND_TITLE);
066: operandCtcon.setShortDescription(OPERAND_SHORT_DESCRIPTION);
067: //
068: StaticConceptTagConstraintContext operandSctcc = StaticConceptTagConstraintContext
069: .newInstance(operandCtcon);
070: operandSctcc.setRegularExpression(CommonExpressions.ANY_STRING);
071: //
072: DynamicConceptTagConstraintContext operandDctcc = DynamicConceptTagConstraintContext
073: .newInstance(operandCtcon);
074: operandDctcc.getValidator().filterDirectChildOfRootAndHtml();
075: //
076: operandSctcc.addDefaultValue("SomeText");
077: operandSctcc.addDefaultValue("SomeText");
078:
079: //
080: ConceptTagFlagsHelper
081: .pushNonIterativeCommonFunctionDepth(inIctc);
082: inIctc.initialize();
083: ConceptTagFlagsHelper
084: .popNonIterativeCommonFunctionDepth(inIctc);
085:
086: //initialize characteristics
087: this .operandCtchar = operandCtcon.getCharacteristic();
088:
089: }
090:
091: public void appraise(AppraiseConceptTagContext inActc) {
092:
093: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
094:
095: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
096:
097: sctiic.setInstanceTitle("String Concatenate");
098: sctiic
099: .setInstanceDescription("Concatenates two or more strings");
100: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
101:
102: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
103:
104: scttic.setTypeTitle("String Concatenate");
105: scttic
106: .setTypeDescription("Concatenates two or more strings");
107: } else if (inActc instanceof WebPageTagInstanceViewContext) {
108:
109: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
110:
111: WebPageTagInstanceViewContextInfo info = wptivc
112: .getInfoAsNonHtml();
113:
114: //
115: info.setNonHtmlContent("Concatenate(", ")");
116: for (int i = 0; i < this .operandCtchar.getValueLength(); i++) {
117: //
118: WebPageTagInstanceViewContextInfo nextAddendInfo = info
119: .createNonHtmlInfo();
120: if (i > 0) {
121: nextAddendInfo.setNonHtmlContent(" + ");
122: }
123: WebPageTagInstanceViewContext.displayView(
124: this .operandCtchar, nextAddendInfo, wptivc, i,
125: i + 1);
126: }
127: //
128: if (this .operandCtchar.getValueLength() == 0) {
129: WebPageTagInstanceViewContextInfo subInfo = info
130: .createNonHtmlInfo(OPERAND_CTCON);
131: subInfo.setNonHtmlContent("???");
132: }
133: ////
134: ////
135: //info.setEndContent(")");
136: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
137:
138: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
139:
140: scfrct.canReturnString();
141: scfrct.declareFormatAsPlain();
142: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
143:
144: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
145: }
146: }
147:
148: public void determineValueAndClass(
149: DetermineValueAndClassConceptTagContext inDvacctc) {
150:
151: try {
152: ValueAndClassForConceptTag vacfct = null;
153:
154: String result = "";
155:
156: for (int i = 0; i < this .operandCtchar.getValueLength(); i++) {
157: if (this .operandCtchar.isStatic(i, inDvacctc)) {
158: result = result
159: + this .operandCtchar.getValueAsString(i,
160: inDvacctc);
161: } else {
162: ValueAndClassForConceptTag operandVac = this .operandCtchar
163: .getDetermineValueAndClass(i, inDvacctc);
164: result = result + operandVac.getValue();
165: }
166: }
167: vacfct = ValueAndClassForConceptTag.newString(result);
168:
169: inDvacctc.setDetermineValueAndClass(vacfct);
170: } catch (DetermineValueAndClassConceptTagException dvaccte) {
171: inDvacctc.setDetermineException(dvaccte);
172: }
173: }
174:
175: public void determineClass(DetermineClassConceptTagContext inDcctc) {
176:
177: inDcctc.setDetermineClass(StandardDataTypes.getStringClass());
178: //return String.class;
179: }
180:
181: public Object createUninitializedSelf() {
182: return new CommonFunctionStrConcatenateTag();
183: }
184: /*
185: public void getTagSummary(TagSummaryDescriptor tsd) {
186: //TO DO: placeholder, put meaningful description
187: if (tsd.getMimeType().equals(TagSummaryMimeType.TEXT_HTML)) {
188: tsd.appendData(
189: "Concatenate the following into a single String -<br/>");
190: for (int i = 0; i < this.returnableTags.size(); i++) {
191: //if (i != 0) {
192: // tsd.appendData(" + ");
193: //}
194: ((Tag)(this.returnableTags.get(i))).getTagSummary(tsd);
195: }
196: }
197: }
198: */
199: }
|