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.math.BigDecimal;
012:
013: //project specific classes
014: import org.jfolder.common.SelfArgumentlessConstructor;
015: import org.jfolder.common.StandardDataTypes;
016: import org.jfolder.common.UnexpectedSystemException;
017: import org.jfolder.common.function.BaseCommonFunctionCompatibilityTag;
018: import org.jfolder.common.function.WebPageTagInstanceViewContext;
019: import org.jfolder.common.function.WebPageTagInstanceViewContextInfo;
020: import org.jfolder.common.tagging.AppraiseConceptTagContext;
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.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 CommonFunctionMathDropFractionTag extends
043: BaseCommonFunctionCompatibilityTag implements
044: SelfArgumentlessConstructor {
045:
046: //characteristics
047: private ConceptTagCharacteristic numberCtchar = null;
048:
049: //addend details
050: private final static String NUMBER_CTCON = "number";
051: private final static String NUMBER_TITLE = "Number";
052: private final static String NUMBER_SHORT_DESCRIPTION = "The number whose fraction will be dropped";
053:
054: public void initialize(InitializeConceptTagContext inIctc) {
055:
056: //
057: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
058: .newInstance(inIctc);
059:
060: //constrain "number"
061: ConceptTagConstraint numberCtcon = ConceptTagConstraint
062: .newInstance(NUMBER_CTCON, rootCtconh);
063: numberCtcon.setMinimumLength(1);
064: numberCtcon.setMaximumLength(1);
065: numberCtcon.setTitle(NUMBER_TITLE);
066: numberCtcon.setShortDescription(NUMBER_SHORT_DESCRIPTION);
067: //
068: //StaticConceptTagConstraintContext numberSctcc =
069: // StaticConceptTagConstraintContext.newInstance(numberCtcon);
070: //numberSctcc.setRegularExpression(CommonExpressions.DECIMAL);
071: //
072: DynamicConceptTagConstraintContext numberDctcc = DynamicConceptTagConstraintContext
073: .newInstance(numberCtcon);
074: numberDctcc.getValidator().allowReturnOfOnlyDecimal();
075: numberDctcc.getValidator().filterDirectChildOfRootAndHtml();
076: //
077: //addendSctcc.addDefaultValue("0");
078: //addendSctcc.addDefaultValue("0");
079:
080: //
081: ConceptTagFlagsHelper
082: .pushNonIterativeCommonFunctionDepth(inIctc);
083: inIctc.initialize();
084: ConceptTagFlagsHelper
085: .popNonIterativeCommonFunctionDepth(inIctc);
086:
087: //initialize characteristics
088: this .numberCtchar = numberCtcon.getCharacteristic();
089: //this.removeThisInitialized = true;
090: }
091:
092: public void appraise(AppraiseConceptTagContext inActc) {
093:
094: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
095:
096: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
097:
098: sctiic.setInstanceTitle("Drop Fraction");
099: sctiic
100: .setInstanceDescription("Round down to nearest integer");
101: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
102:
103: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
104:
105: scttic.setTypeTitle("Drop Fraction");
106: scttic.setTypeDescription("Round down to nearest integer");
107: } else if (inActc instanceof WebPageTagInstanceViewContext) {
108:
109: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
110:
111: WebPageTagInstanceViewContextInfo info = wptivc
112: .getInfoAsNonHtml();
113:
114: info.setNonHtmlContent("DropFraction(", ")");
115: WebPageTagInstanceViewContext.displayView(
116: this .numberCtchar, info, wptivc, "???");
117: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
118:
119: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
120:
121: scfrct.canReturnDecimal();
122: scfrct.declareFormatAsPlain();
123: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
124:
125: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
126: }
127: }
128:
129: public void determineValueAndClass(
130: DetermineValueAndClassConceptTagContext inDvacctc) {
131:
132: try {
133: ValueAndClassForConceptTag vacfct = null;
134:
135: ValueAndClassForConceptTag baseVac = this .numberCtchar
136: .getDetermineValueAndClass(0, inDvacctc);
137: Object v = baseVac.getValue();
138: BigDecimal bd = MiscHelper.fromNumberToBigDecimal(v);
139: bd = new BigDecimal(bd.toBigInteger());
140:
141: vacfct = ValueAndClassForConceptTag.newDecimal(bd);
142:
143: inDvacctc.setDetermineValueAndClass(vacfct);
144: } catch (DetermineValueAndClassConceptTagException dvaccte) {
145: inDvacctc.setDetermineException(dvaccte);
146: }
147: }
148:
149: public void determineClass(DetermineClassConceptTagContext inDcctc) {
150: inDcctc.setDetermineClass(StandardDataTypes.getDecimalClass());
151: }
152:
153: public Object createUninitializedSelf() {
154: return new CommonFunctionMathDropFractionTag();
155: }
156: }
|