0001: /*
0002: * JFolder, Copyright 2001-2006 Gary Steinmetz
0003: *
0004: * Distributable under LGPL license.
0005: * See terms of license at gnu.org.
0006: */
0007:
0008: package org.jfolder.web.page.v1;
0009:
0010: //base classes
0011: import java.util.ArrayList;
0012: import java.util.HashMap;
0013:
0014: //project specific classes
0015: import org.jfolder.common.StandardDataTypes;
0016: import org.jfolder.common.files.WebPageTagMacro;
0017: import org.jfolder.common.function.BaseWebPageTag;
0018: import org.jfolder.common.function.WebPageTagInstanceViewContext;
0019: import org.jfolder.common.function.WebPageTagInstanceViewContextInfo;
0020: import org.jfolder.common.function.WebPageTagInstanceViewContextSubHtmlInfo;
0021: import org.jfolder.common.function.v1.PostConstraintValidatorForDataSource;
0022: import org.jfolder.common.function.v1.PostConstraintValidatorForVarNameAndType;
0023: import org.jfolder.common.tagging.AppraiseConceptTagContext;
0024: import org.jfolder.common.tagging.CompoundConceptTagConstraintContext;
0025: import org.jfolder.common.tagging.ConceptTagCharacteristic;
0026: import org.jfolder.common.tagging.ConceptTagCharacteristicHolder;
0027: import org.jfolder.common.tagging.ConceptTagConstraint;
0028: import org.jfolder.common.tagging.ConceptTagConstraintHolder;
0029: import org.jfolder.common.tagging.ConceptTagConstraintTemplate;
0030: import org.jfolder.common.tagging.ConceptTagFlagsHelper;
0031: import org.jfolder.common.tagging.ConceptTagHelper;
0032: import org.jfolder.common.tagging.ConceptTagMessageHolder;
0033: import org.jfolder.common.tagging.DetermineClassConceptTagContext;
0034: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagContext;
0035: import org.jfolder.common.tagging.DetermineValueAndClassConceptTagException;
0036: import org.jfolder.common.tagging.DynamicConceptTagConstraintContext;
0037: import org.jfolder.common.tagging.DynamicConceptTagValidator;
0038: import org.jfolder.common.tagging.InitializeConceptTagContext;
0039: import org.jfolder.common.tagging.SelectionCriteriaForReturnableConceptTag;
0040: import org.jfolder.common.tagging.StaticConceptTagConstraintContext;
0041: import org.jfolder.common.tagging.StudioConceptTagCreParInfoContext;
0042: import org.jfolder.common.tagging.StudioConceptTagInstanceInfoContext;
0043: import org.jfolder.common.tagging.StudioConceptTagTypeInfoContext;
0044: import org.jfolder.common.tagging.ValueAndClassForConceptTag;
0045: import org.jfolder.common.utils.xml.XMLHelper;
0046:
0047: //other classes
0048:
0049: public class TaglibDeclareMacroWebPageTag extends BaseWebPageTag
0050: implements WebPageTagMacro {
0051:
0052: //characteristics
0053: private ConceptTagCharacteristic nameCtchar = null;
0054: private ConceptTagCharacteristic parameterCtchar = null;
0055: private ConceptTagCharacteristic resultCtchar = null;
0056: private ConceptTagCharacteristic actionCtchar = null;
0057: private ConceptTagCharacteristic outputCtchar = null;
0058:
0059: //name details
0060: private final static String NAME_CTCON = "name";
0061: private final static String NAME_TITLE = "Macro name";
0062: private final static String NAME_SHORT_DESCRIPTION = "Macro name";
0063:
0064: //
0065: //
0066: //
0067: //parameter details
0068: private final static String PARAMETER_CTCON = "parameter";
0069: private final static String PARAMETER_TITLE = "Parameter";
0070: private final static String PARAMETER_SHORT_DESCRIPTION = "Parameter";
0071: //
0072: //name of parameter details
0073: private final static String PARAMETER_CTCON_NAME_CTCTEMP = "name";
0074: private final static String PARAMETER_CTCON_NAME_TITLE = "Name";
0075: private final static String PARAMETER_CTCON_NAME_SHORT_DESCRIPTION = "Name";
0076: //
0077: //type of parameter details
0078: private final static String PARAMETER_CTCON_TYPE_CTCTEMP = "type";
0079: private final static String PARAMETER_CTCON_TYPE_TITLE = "Type";
0080: private final static String PARAMETER_CTCON_TYPE_SHORT_DESCRIPTION = "Type";
0081:
0082: //
0083: //
0084: //
0085: //
0086: //result details
0087: public final static String RESULT_CTCON = "result";
0088: private final static String RESULT_TITLE = "Result";
0089: private final static String RESULT_SHORT_DESCRIPTION = "Result";
0090: //
0091: //name of result details
0092: private final static String RESULT_CTCON_NAME_CTCTEMP = "name";
0093: private final static String RESULT_CTCON_NAME_TITLE = "Name";
0094: private final static String RESULT_CTCON_NAME_SHORT_DESCRIPTION = "Name of result variable";
0095:
0096: //type of result details
0097: private final static String RESULT_CTCON_TYPE_CTCTEMP = "type";
0098: private final static String RESULT_CTCON_TYPE_TITLE = "Type";
0099: private final static String RESULT_CTCON_TYPE_SHORT_DESCRIPTION = "Type of result variable";
0100:
0101: //value of result details
0102: public final static String RESULT_CTCON_VALUE_CTCTEMP = "value";
0103: private final static String RESULT_CTCON_VALUE_TITLE = "Value";
0104: private final static String RESULT_CTCON_VALUE_SHORT_DESCRIPTION = "Value of result variable";
0105:
0106: //
0107: //
0108: //
0109: //
0110: //action details
0111: public final static String ACTION_CTCON = "action";
0112: private final static String ACTION_TITLE = "Actions";
0113: private final static String ACTION_SHORT_DESCRIPTION = "Actions";
0114:
0115: //
0116: //
0117: //
0118: //
0119: //output details
0120: public final static String OUTPUT_CTCON = "output";
0121: private final static String OUTPUT_TITLE = "Output";
0122: private final static String OUTPUT_SHORT_DESCRIPTION = "Output";
0123:
0124: public void initialize(InitializeConceptTagContext inIctc) {
0125:
0126: //
0127: ConceptTagConstraintHolder rootCtconh = ConceptTagConstraintHolder
0128: .newInstance(inIctc);
0129: ConceptTagCharacteristicHolder rootCtcharh = rootCtconh
0130: .getCharacteristicHolder();
0131:
0132: //constrain "name"
0133: ConceptTagConstraint nameCtcon = ConceptTagConstraint
0134: .newInstance(NAME_CTCON, rootCtconh);
0135: //
0136: nameCtcon.setMinimumLength(1);
0137: nameCtcon.setMaximumLength(1);
0138: //
0139: nameCtcon.setTitle(NAME_TITLE);
0140: nameCtcon.setShortDescription(NAME_SHORT_DESCRIPTION);
0141: //
0142: StaticConceptTagConstraintContext nameSctcc = StaticConceptTagConstraintContext
0143: .newInstance(nameCtcon);
0144: //addendSctcc.setRegularExpression(CommonExpressions.DECIMAL);
0145: //
0146:
0147: //
0148: //
0149: //
0150: //
0151: //constrain "parameter"
0152: ConceptTagConstraint parameterCtcon = ConceptTagConstraint
0153: .newInstance(PARAMETER_CTCON, rootCtconh);
0154: //
0155: parameterCtcon.setTitle(PARAMETER_TITLE);
0156: parameterCtcon.setShortDescription(PARAMETER_SHORT_DESCRIPTION);
0157: //
0158: parameterCtcon.setMinimumLength(0);
0159: parameterCtcon.setLengthUnbounded(true);
0160: //
0161: CompoundConceptTagConstraintContext parameterCctcc = CompoundConceptTagConstraintContext
0162: .newInstance(parameterCtcon);
0163: //
0164: //constrain "name" of "parameter"
0165: ConceptTagConstraintTemplate parameterCtconNameCtctemp = ConceptTagConstraintTemplate
0166: .newInstance(PARAMETER_CTCON_NAME_CTCTEMP,
0167: parameterCctcc);
0168: //
0169: parameterCtconNameCtctemp.setTitle(PARAMETER_CTCON_NAME_TITLE);
0170: parameterCtconNameCtctemp
0171: .setShortDescription(PARAMETER_CTCON_NAME_SHORT_DESCRIPTION);
0172: //
0173: //constrain "type" of "parameter"
0174: ConceptTagConstraintTemplate parameterCtconTypeCtctemp = ConceptTagConstraintTemplate
0175: .newInstance(PARAMETER_CTCON_TYPE_CTCTEMP,
0176: parameterCctcc);
0177: //
0178: parameterCtconTypeCtctemp.setTitle(PARAMETER_CTCON_TYPE_TITLE);
0179: parameterCtconTypeCtctemp
0180: .setShortDescription(PARAMETER_CTCON_TYPE_SHORT_DESCRIPTION);
0181: //
0182: PostConstraintValidatorForVarNameAndType
0183: .initializeNameAndTypeCtcon(parameterCtconNameCtctemp,
0184: parameterCtconTypeCtctemp,
0185: PARAMETER_CTCON_NAME_CTCTEMP,
0186: PARAMETER_CTCON_TYPE_CTCTEMP, null, false,
0187: rootCtcharh.getHandle(), -1);
0188: //
0189: //DynamicConceptTagConstraintContext macroDctcc =
0190: // macroCtcon.getDynamicConstraintContext();
0191: //
0192: //Class macroClasses[] = new Class[1];
0193: //macroClasses[0] = TaglibDeclareMacroWebPageTag.class;
0194: //macroDctcc.getValidator().allowOnlyTheseClasses(
0195: // macroClasses, "Only Macro tags are allowed here");
0196: //
0197: //macroDctcc.addDefaultValue(TaglibDeclareMacroWebPageTag.class);
0198:
0199: //
0200: //CommonV1WebPageTagHelper.prepUndefConForGenUse(rootCtconh);
0201: ////constrain undefined
0202: //ConceptTagConstraint unconstrainedCtcon =
0203: // rootCtconh.getUndefinedConstraint();
0204: //unconstrainedCtcon.setMaximumLength(1);
0205: ////
0206: //DynamicConceptTagConstraintContext unconstrainedDctcc =
0207: // unconstrainedCtcon.getDynamicConstraintContext();
0208: ////
0209: //Class unconstrainedClasses[] = new Class[1];
0210: //unconstrainedClasses[0] = TaglibDeclareMacroWebPageTag.class;
0211: //unconstrainedDctcc.getValidator().allowOnlyTheseClasses(
0212: // unconstrainedClasses, "Only Macro tags are allowed here");
0213: ////
0214: //unconstrainedDctcc.addDefaultValue(
0215: // TaglibDeclareMacroWebPageTag.class);
0216:
0217: //
0218: //
0219: //
0220: //
0221: //
0222: //
0223: //
0224: //
0225: //
0226: //
0227: //
0228: //constrain "result"
0229: ConceptTagConstraint resultCtcon = ConceptTagConstraint
0230: .newInstance(RESULT_CTCON, rootCtconh);
0231: //
0232: resultCtcon.setTitle(RESULT_TITLE);
0233: resultCtcon.setShortDescription(RESULT_SHORT_DESCRIPTION);
0234: //
0235: resultCtcon.setMinimumLength(0);
0236: resultCtcon.setLengthUnbounded(true);
0237: //
0238: CompoundConceptTagConstraintContext resultCctcc = CompoundConceptTagConstraintContext
0239: .newInstance(resultCtcon);
0240: //
0241: //constrain "name" of "result"
0242: ConceptTagConstraintTemplate resultCtconNameCtctemp = ConceptTagConstraintTemplate
0243: .newInstance(RESULT_CTCON_NAME_CTCTEMP, resultCctcc);
0244: resultCtconNameCtctemp.setTitle(RESULT_CTCON_NAME_TITLE);
0245: resultCtconNameCtctemp
0246: .setShortDescription(RESULT_CTCON_NAME_SHORT_DESCRIPTION);
0247: //
0248: //nameCtcon.setMinimumLength(1);
0249: //nameCtcon.setMaximumLength(1);
0250: ////
0251: //StaticConceptTagConstraintContext nameSctcc =
0252: // StaticConceptTagConstraintContext.newInstance(nameCtcon);
0253: //nameSctcc.addDefaultValue("LocalVariable1");
0254:
0255: //constrain "type" of "result"
0256: ConceptTagConstraintTemplate resultCtconTypeCtctemp = ConceptTagConstraintTemplate
0257: .newInstance(RESULT_CTCON_TYPE_CTCTEMP, resultCctcc);
0258: //
0259: resultCtconTypeCtctemp.setTitle(RESULT_CTCON_TYPE_TITLE);
0260: resultCtconTypeCtctemp
0261: .setShortDescription(RESULT_CTCON_TYPE_SHORT_DESCRIPTION);
0262: //
0263: //
0264: //
0265: PostConstraintValidatorForVarNameAndType
0266: .initializeNameAndTypeCtcon(resultCtconNameCtctemp,
0267: resultCtconTypeCtctemp,
0268: RESULT_CTCON_NAME_CTCTEMP,
0269: RESULT_CTCON_TYPE_CTCTEMP,
0270: RESULT_CTCON_VALUE_CTCTEMP, false, rootCtcharh
0271: .getHandle(), -1);
0272: //
0273: //
0274: //
0275: //constrain "value" of "result"
0276: ConceptTagConstraintTemplate resultCtconValueCtctemp = ConceptTagConstraintTemplate
0277: .newInstance(RESULT_CTCON_VALUE_CTCTEMP, resultCctcc);
0278: //
0279: resultCtconValueCtctemp.setMinimumLength(1);
0280: resultCtconValueCtctemp.setMaximumLength(1);
0281: //
0282: resultCtconValueCtctemp.setTitle(RESULT_CTCON_VALUE_TITLE);
0283: resultCtconValueCtctemp
0284: .setShortDescription(RESULT_CTCON_VALUE_SHORT_DESCRIPTION);
0285: //
0286: //StaticConceptTagConstraintContext resultCtconValueSctcc =
0287: // StaticConceptTagConstraintContext.newInstance(
0288: // resultCtconValueCtctemp);
0289: //DynamicConceptTagConstraintContext resultCtconValueDctcc =
0290: // DynamicConceptTagConstraintContext.newInstance(
0291: // resultCtconValueCtctemp);
0292: //valueSctcc.addDefaultValue("(Your Text Here)");
0293:
0294: //
0295: //
0296: //
0297: //constrain "action"
0298: ConceptTagConstraint actionCtcon = ConceptTagConstraint
0299: .newInstance(ACTION_CTCON, rootCtconh);
0300: //
0301: actionCtcon.setTitle(ACTION_TITLE);
0302: actionCtcon.setShortDescription(ACTION_SHORT_DESCRIPTION);
0303: //
0304: //
0305: //PostConstraintValidatorForDataSource.initializeActionCtcon(
0306: // actionCtcon, inIctc);
0307: PostConstraintValidatorForDataSource.initializeActionCtcon(
0308: actionCtcon, inIctc, false);
0309:
0310: //
0311: //
0312: //
0313: //constrain "output"
0314: ConceptTagConstraint outputCtcon = ConceptTagConstraint
0315: .newInstance(OUTPUT_CTCON, rootCtconh);
0316: //
0317: outputCtcon.setTitle(OUTPUT_TITLE);
0318: outputCtcon.setShortDescription(OUTPUT_SHORT_DESCRIPTION);
0319: //
0320: StaticConceptTagConstraintContext outputSctcc = StaticConceptTagConstraintContext
0321: .newInstance(outputCtcon);
0322: outputSctcc.setMultiLine(true);
0323: //
0324: DynamicConceptTagConstraintContext outputDctcc = DynamicConceptTagConstraintContext
0325: .newInstance(outputCtcon);
0326: DynamicConceptTagValidator outputDctv = outputDctcc
0327: .getValidator();
0328: outputDctv.allowReturnOfAnythingIncludingNothing();
0329: //
0330: outputCtcon.setMinimumLength(0);
0331: outputCtcon.setLengthUnbounded(true);
0332:
0333: //
0334: inIctc.initialize();
0335: ConceptTagFlagsHelper.showCurrentVariables(inIctc,
0336: "TagDecMacWebPagTag after initialize");
0337:
0338: //
0339: this .nameCtchar = nameCtcon.getCharacteristic();
0340: this .parameterCtchar = parameterCtcon.getCharacteristic();
0341: this .resultCtchar = resultCtcon.getCharacteristic();
0342: this .actionCtchar = actionCtcon.getCharacteristic();
0343: this .outputCtchar = outputCtcon.getCharacteristic();
0344:
0345: //
0346: if (this .resultCtchar.getValueLength() > 0
0347: && this .outputCtchar.getValueLength() > 0) {
0348: //
0349: ConceptTagMessageHolder resultCtmh = this .resultCtchar
0350: .getParentMessageHolder();
0351: resultCtmh
0352: .addErrorHeaderMessage("Either 'Result' or 'Output' can be declared, but not both");
0353: }
0354: }
0355:
0356: public void appraise(AppraiseConceptTagContext inActc) {
0357:
0358: if (inActc instanceof StudioConceptTagInstanceInfoContext) {
0359:
0360: StudioConceptTagInstanceInfoContext sctiic = (StudioConceptTagInstanceInfoContext) inActc;
0361:
0362: sctiic.setInstanceTitle("Declare Macro");
0363: sctiic.setInstanceDescription("Declare Macro");
0364: } else if (inActc instanceof StudioConceptTagTypeInfoContext) {
0365:
0366: StudioConceptTagTypeInfoContext scttic = (StudioConceptTagTypeInfoContext) inActc;
0367:
0368: scttic.setTypeTitle("Declare Macro");
0369: scttic.setTypeDescription("Declare Macro");
0370: } else if (inActc instanceof WebPageTagInstanceViewContext) {
0371:
0372: WebPageTagInstanceViewContext wptivc = (WebPageTagInstanceViewContext) inActc;
0373:
0374: //
0375: WebPageTagInstanceViewContextInfo info = wptivc
0376: .getInfoAsHtml();
0377:
0378: HashMap attrs = new HashMap();
0379: attrs.put("width", "100%");
0380: info
0381: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0382: .newInstance("table", attrs));
0383: //
0384: //
0385: info.declareMouseOutBorderAsGray();
0386: info.declareMouseOutBorderAsOnePixel();
0387: info.declareMouseOutBorderAsDotted();
0388: //
0389: //
0390: //
0391: //name
0392: //
0393: addSingleLine("Macro", NAME_CTCON, this .nameCtchar, info,
0394: wptivc);
0395: //
0396: //
0397: //
0398: //parameter
0399: addMultiLine("Parameters", PARAMETER_CTCON,
0400: this .parameterCtchar, "Name",
0401: PARAMETER_CTCON_NAME_CTCTEMP, "Type",
0402: PARAMETER_CTCON_TYPE_CTCTEMP, null, null, info,
0403: wptivc);
0404: //
0405: /*
0406: for (int i = 0; i < this.parameterCtchar.getValueLength(); i++) {
0407: if (this.parameterCtchar.isHolderWithoutConceptTag(i, inActc)) {
0408: //
0409: ConceptTagCharacteristicHolder nextCtcharh =
0410: this.parameterCtchar.getValueAsHolder(i, inActc);
0411: //
0412: ConceptTagCharacteristic nextNameCtchar =
0413: nextCtcharh.getCharacteristic(
0414: PARAMETER_CTCON_NAME_CTCTEMP);
0415: //
0416: ConceptTagCharacteristic nextTypeCtchar =
0417: nextCtcharh.getCharacteristic(
0418: PARAMETER_CTCON_TYPE_CTCTEMP);
0419: //
0420: WebPageTagInstanceViewContextInfo parameterInfo =
0421: info.createHtmlInfo(this.parameterCtchar, i, null);
0422: //
0423: if (i > 0) {
0424: parameterInfo.setHtmlContent(
0425: "<tr><td width=\"25%\"> </td>",
0426: "</tr>", true);
0427: }
0428: else {
0429: parameterInfo.setHtmlContent(
0430: "<tr><td width=\"25%\">Parameter:</td>",
0431: "</tr>", true);
0432: }
0433: //
0434: WebPageTagInstanceViewContextInfo nextNameInfo =
0435: parameterInfo.createHtmlInfo();
0436: if (nextNameCtchar.getValueLength() > 0
0437: && nextNameCtchar.isStatic(0, inActc)) {
0438: //
0439: nextNameInfo.setHtmlContent(
0440: "<td width=\"25%\">Name - "
0441: + XMLHelper.fromStringToHTML(
0442: nextNameCtchar.getValueAsString(0, inActc)),
0443: "</td>", true);
0444: //
0445: //
0446: //nextNameInfo.setEndContent("</td>");
0447: }
0448: else {
0449: nextNameInfo.setHtmlContent(
0450: "<td width=\"25%\">Type - ?Unknown?</td>", true);
0451: }
0452: //
0453: //
0454: //
0455: WebPageTagInstanceViewContextInfo nextTypeInfo =
0456: parameterInfo.createHtmlInfo();
0457: if (nextTypeCtchar.getValueLength() > 0
0458: && nextTypeCtchar.isStatic(0, inActc)) {
0459: //
0460: nextTypeInfo.setHtmlContent(
0461: "<td width=\"50%\" colspan=\"2\">Type - "
0462: + XMLHelper.fromStringToHTML(
0463: nextTypeCtchar.getValueAsString(0, inActc)),
0464: "</td>", true);
0465: //
0466: //
0467: //nextTypeInfo.setEndContent("</td>");
0468: }
0469: else {
0470: nextTypeInfo.setHtmlContent(
0471: "<td width=\"50%\" colspan=\"2\">"
0472: + "Type - ?Unknown?</td>", true);
0473: }
0474: //
0475: //
0476: //
0477: //parameterInfo.setEndContent("</tr>");
0478: }
0479: }
0480: if (this.parameterCtchar.getValueLength() == 0) {
0481: WebPageTagInstanceViewContextInfo parameterInfo =
0482: info.createHtmlInfo();
0483: parameterInfo.setHtmlContent(
0484: "<tr><td width=\"25%\">Parameters:</td>"
0485: + "<td width=\"75%\" colspan=\"3\">(None)</td>",
0486: "</tr>", true);
0487: //parameterInfo.setEndContent("</tr>");
0488: }
0489: */
0490: //
0491: //
0492: //result
0493: //
0494: addMultiLine("Result", RESULT_CTCON, this .resultCtchar,
0495: "Name", RESULT_CTCON_NAME_CTCTEMP, "Type",
0496: RESULT_CTCON_TYPE_CTCTEMP, "Value",
0497: RESULT_CTCON_VALUE_CTCTEMP, info, wptivc);
0498: //
0499: /*
0500: if (this.resultCtchar.getValueLength() > 0
0501: && this.resultCtchar.isHolderWithoutConceptTag(0, inActc)) {
0502: //
0503: ConceptTagCharacteristicHolder nextCtcharh =
0504: this.resultCtchar.getValueAsHolder(0, inActc);
0505: //
0506: ConceptTagCharacteristic nextNameCtchar =
0507: nextCtcharh.getCharacteristic(
0508: RESULT_CTCON_NAME_CTCTEMP);
0509: //
0510: ConceptTagCharacteristic nextTypeCtchar =
0511: nextCtcharh.getCharacteristic(
0512: RESULT_CTCON_TYPE_CTCTEMP);
0513: //
0514: ConceptTagCharacteristic nextValueCtchar =
0515: nextCtcharh.getCharacteristic(
0516: RESULT_CTCON_VALUE_CTCTEMP);
0517: //
0518: //
0519: //
0520: //
0521: //
0522: WebPageTagInstanceViewContextInfo resultInfo =
0523: info.createHtmlInfo(this.resultCtchar, 0, null);
0524: //
0525: resultInfo.setHtmlContent(
0526: "<tr><td width=\"25%\">Result:</td>", "</tr>", true);
0527: //
0528: WebPageTagInstanceViewContextInfo nextNameInfo =
0529: resultInfo.createHtmlInfo();
0530: if (nextNameCtchar.getValueLength() > 0
0531: && nextNameCtchar.isStatic(0, inActc)) {
0532: //
0533: nextNameInfo.setHtmlContent(
0534: "<td width=\"25%\">Name - "
0535: + XMLHelper.fromStringToHTML(
0536: nextNameCtchar.getValueAsString(0, inActc)),
0537: "</td>", true);
0538: //
0539: //
0540: //nextNameInfo.setEndContent("</td>");
0541: }
0542: else {
0543: nextNameInfo.setHtmlContent(
0544: "<td width=\"25%\">Type - ?Unknown?</td>", true);
0545: }
0546: //
0547: //
0548: //
0549: WebPageTagInstanceViewContextInfo nextTypeInfo =
0550: resultInfo.createHtmlInfo();
0551: if (nextTypeCtchar.getValueLength() > 0
0552: && nextTypeCtchar.isStatic(0, inActc)) {
0553: //
0554: nextTypeInfo.setHtmlContent(
0555: "<td width=\"25%\">Type - "
0556: + XMLHelper.fromStringToHTML(
0557: nextTypeCtchar.getValueAsString(0, inActc)),
0558: "</td>", true);
0559: //
0560: //
0561: //nextTypeInfo.setEndContent("</td>");
0562: }
0563: else {
0564: nextTypeInfo.setHtmlContent(
0565: "<td width=\"25%\">Type - ?Unknown?</td>", true);
0566: }
0567: //
0568: //
0569: //
0570: WebPageTagInstanceViewContextInfo nextValueInfo =
0571: resultInfo.createHtmlInfo();
0572: if (nextValueCtchar.getValueLength() > 0) {
0573: //&& nextValueCtchar.isStatic(0, inActc)) {
0574: //
0575: nextValueInfo.setHtmlContent(
0576: "<td width=\"25%\">Initial Value - ", "</td>", true);
0577: //
0578: WebPageTagInstanceViewContext.displayView(
0579: nextValueCtchar, nextValueInfo, wptivc);
0580: //
0581: //nextValueInfo.setEndContent("</td>");
0582: }
0583: else {
0584: nextValueInfo.setHtmlContent(
0585: "<td width=\"25%\">Initial Value - ?Unknown?</td>",
0586: true);
0587: }
0588: //
0589: //
0590: //
0591: //resultInfo.setEndContent("</tr>");
0592: }
0593: else {
0594: WebPageTagInstanceViewContextInfo resultInfo =
0595: info.createHtmlInfo();
0596: resultInfo.setHtmlContent(
0597: "<tr><td width=\"25%\">Result:</td>"
0598: + "<td width=\"75%\" colspan=\"3\">(None)</td>",
0599: "</tr>", true);
0600: //resultInfo.setEndContent("</tr>");
0601: }
0602: */
0603: //
0604: //
0605: //action
0606: //
0607: addSingleLine("Action", ACTION_CTCON, this .actionCtchar,
0608: info, wptivc);
0609: //
0610: //
0611: ////////////////////////////////////////////////
0612: //
0613: //output
0614: //
0615: addSingleLine("Output", OUTPUT_CTCON, this .outputCtchar,
0616: info, wptivc);
0617: //
0618: //
0619: //
0620: } else if (inActc instanceof SelectionCriteriaForReturnableConceptTag) {
0621:
0622: SelectionCriteriaForReturnableConceptTag scfrct = (SelectionCriteriaForReturnableConceptTag) inActc;
0623:
0624: scfrct.canReturnNothing();
0625: scfrct.declareFormatAsHtml();
0626:
0627: //ConceptTagFlagsHelper.assertCanBeDirectChildOfRoot(scfrct);
0628: //ConceptTagFlagsHelper.setConceptTagAsUndeployable(scfrct);
0629: } else if (inActc instanceof StudioConceptTagCreParInfoContext) {
0630:
0631: StudioConceptTagCreParInfoContext scpc = (StudioConceptTagCreParInfoContext) inActc;
0632: }
0633: }
0634:
0635: //
0636: //
0637: //
0638: private final static void addMultiLine(String inTitle,
0639: String inCtconName, ConceptTagCharacteristic inCtchar,
0640: String inFirstTitle, String inFirstCtcon,
0641: String inSecondTitle, String inSecondCtcon,
0642: String inThirdTitle, String inThirdCtcon,
0643: WebPageTagInstanceViewContextInfo inParentInfo,
0644: WebPageTagInstanceViewContext inWptivc) {
0645: //
0646: for (int i = 0; i < inCtchar.getValueLength(); i++) {
0647: //
0648: WebPageTagInstanceViewContextInfo parentTrInfo = inParentInfo
0649: .createHtmlInfo();
0650: //
0651: HashMap parentTrAttrs = new HashMap();
0652: //
0653: parentTrInfo
0654: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0655: .newInstance("tr", parentTrAttrs));
0656: //
0657: ////////////////////////////
0658: WebPageTagInstanceViewContextInfo parentFirstTdInfo = parentTrInfo
0659: .createHtmlInfo();
0660: //
0661: //
0662: HashMap parentFirstTdAttrs = new HashMap();
0663: parentFirstTdAttrs.put("width", "25%");
0664: //
0665: parentFirstTdInfo
0666: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0667: .newInstance("td", parentFirstTdAttrs));
0668: //
0669: WebPageTagInstanceViewContextInfo parentFirstSubTdInfo = parentFirstTdInfo
0670: .createHtmlInfo();
0671: if (i == 0) {
0672: parentFirstSubTdInfo
0673: .setHtmlContent(inTitle + ":", true);
0674: } else {
0675: parentFirstSubTdInfo.setHtmlContent(" ", false);
0676: }
0677: //
0678: //
0679: //
0680: //
0681: WebPageTagInstanceViewContextInfo parentSecondTdInfo = parentTrInfo
0682: .createHtmlInfo();
0683: //
0684: //
0685: HashMap outputSecondTdAttrs = new HashMap();
0686: outputSecondTdAttrs.put("width", "75%");
0687: //
0688: parentSecondTdInfo
0689: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0690: .newInstance("td", outputSecondTdAttrs));
0691: //
0692: //
0693: //
0694: ////create sub-table here
0695: WebPageTagInstanceViewContextInfo subTableInfo = parentSecondTdInfo
0696: .createHtmlInfo(inCtchar, i, null);
0697: //
0698: subTableInfo.declareMouseOutBorderAsGray();
0699: subTableInfo.declareMouseOutBorderAsDashed();
0700: //
0701: HashMap subTableAttrs = new HashMap();
0702: subTableAttrs.put("cellspacing", "5px");
0703: subTableInfo
0704: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0705: .newInstance("table", subTableAttrs));
0706: //
0707: WebPageTagInstanceViewContextInfo subTrInfo = subTableInfo
0708: .createHtmlInfo();
0709: subTrInfo.setHtmlContent("<tr>", "</tr>", true);
0710: //
0711: ConceptTagCharacteristicHolder localCtcharh = inCtchar
0712: .getValueAsHolder(i, inWptivc);
0713: //
0714: //
0715: //
0716: //
0717: //
0718: ConceptTagCharacteristic localFirstCtchar = localCtcharh
0719: .getCharacteristic(inFirstCtcon);
0720: //
0721: ConceptTagCharacteristic localSecondCtchar = localCtcharh
0722: .getCharacteristic(inSecondCtcon);
0723: //
0724: //
0725: if (inThirdTitle != null && inThirdCtcon != null) {
0726: //
0727: ConceptTagCharacteristic localThirdCtchar = localCtcharh
0728: .getCharacteristic(inThirdCtcon);
0729: //
0730: addSubMultiLine(inFirstTitle, inFirstCtcon,
0731: new Integer(33), localFirstCtchar, subTrInfo,
0732: inWptivc);
0733: //
0734: addSubMultiLine(inSecondTitle, inSecondCtcon,
0735: new Integer(33), localSecondCtchar, subTrInfo,
0736: inWptivc);
0737: //
0738: addSubMultiLine(inThirdTitle, inThirdCtcon,
0739: new Integer(34), localThirdCtchar, subTrInfo,
0740: inWptivc);
0741: } else {
0742: //
0743: addSubMultiLine(inFirstTitle, inFirstCtcon,
0744: new Integer(66), localFirstCtchar, subTrInfo,
0745: inWptivc);
0746: //
0747: addSubMultiLine(inSecondTitle, inSecondCtcon,
0748: new Integer(34), localSecondCtchar, subTrInfo,
0749: inWptivc);
0750: }
0751: }
0752: if (inCtchar.getValueLength() == 0) {
0753: //
0754: WebPageTagInstanceViewContextInfo parentTrInfo = inParentInfo
0755: .createHtmlInfo();
0756: //
0757: HashMap parentTrAttrs = new HashMap();
0758: //
0759: parentTrInfo
0760: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0761: .newInstance("tr", parentTrAttrs));
0762: //
0763: ////////////////////////////
0764: WebPageTagInstanceViewContextInfo parentFirstTdInfo = parentTrInfo
0765: .createHtmlInfo();
0766: //
0767: //
0768: HashMap parentFirstTdAttrs = new HashMap();
0769: parentFirstTdAttrs.put("width", "25%");
0770: //
0771: parentFirstTdInfo
0772: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0773: .newInstance("td", parentFirstTdAttrs));
0774: //
0775: WebPageTagInstanceViewContextInfo parentFirstSubTdInfo = parentFirstTdInfo
0776: .createHtmlInfo();
0777: parentFirstSubTdInfo.setHtmlContent(inTitle + ":", true);
0778: //
0779: //
0780: //
0781: //
0782: WebPageTagInstanceViewContextInfo parentSecondTdInfo = parentTrInfo
0783: .createHtmlInfo(inCtconName);
0784: //
0785: //
0786: HashMap outputSecondTdAttrs = new HashMap();
0787: outputSecondTdAttrs.put("width", "75%");
0788: //
0789: parentSecondTdInfo
0790: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0791: .newInstance("td", outputSecondTdAttrs));
0792: //
0793: //
0794: //
0795: WebPageTagInstanceViewContextInfo parentSubSecondTdInfo = parentSecondTdInfo
0796: .createHtmlInfo();
0797: parentSubSecondTdInfo.setHtmlContent("(No " + inTitle
0798: + " - Click Here To Add)", true);
0799: }
0800: }
0801:
0802: private final static void addSubMultiLine(String inTitle,
0803: String inCtcon, Integer inWidth,
0804: ConceptTagCharacteristic inCtchar,
0805: WebPageTagInstanceViewContextInfo inParentInfo,
0806: WebPageTagInstanceViewContext inWptivc) {
0807: //
0808: //
0809: HashMap tdAttrs = new HashMap();
0810: if (inWidth != null) {
0811: tdAttrs.put("width", inWidth + "%");
0812: }
0813: //
0814: //
0815: if (inCtchar.getValueLength() > 0) {
0816: //
0817: WebPageTagInstanceViewContextInfo tdInfo = inParentInfo
0818: .createHtmlInfo();
0819: //
0820: tdInfo
0821: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0822: .newInstance("td", tdAttrs));
0823: //
0824: WebPageTagInstanceViewContextInfo tdContentInfo = tdInfo
0825: .createHtmlInfo();
0826: //
0827: tdContentInfo.setHtmlContent(inTitle + ": ", false);
0828: //
0829: WebPageTagInstanceViewContext.displayView(inCtchar,
0830: tdContentInfo, inWptivc);
0831: } else {
0832: //
0833: WebPageTagInstanceViewContextInfo tdInfo = inParentInfo
0834: .createHtmlInfo(inCtcon);
0835: //
0836: tdInfo
0837: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0838: .newInstance("td", tdAttrs));
0839: //
0840: WebPageTagInstanceViewContextInfo tdContentInfo = tdInfo
0841: .createHtmlInfo();
0842: //
0843: tdContentInfo
0844: .setHtmlContent(inTitle + ": ?Unknown?", false);
0845: }
0846: }
0847:
0848: //
0849: protected final static void addSingleLine(String inTitle,
0850: String inCtconName, ConceptTagCharacteristic inCtchar,
0851: WebPageTagInstanceViewContextInfo inParentInfo,
0852: WebPageTagInstanceViewContext inWptivc) {
0853: //
0854: WebPageTagInstanceViewContextInfo outputTrInfo = inParentInfo
0855: .createHtmlInfo();
0856: //
0857: HashMap outputTrAttrs = new HashMap();
0858: //
0859: outputTrInfo
0860: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0861: .newInstance("tr", outputTrAttrs));
0862: //
0863: ////////////////////////////
0864: WebPageTagInstanceViewContextInfo outputFirstTdInfo = outputTrInfo
0865: .createHtmlInfo();
0866: //
0867: //
0868: HashMap outputFirstTdAttrs = new HashMap();
0869: outputFirstTdAttrs.put("width", "25%");
0870: outputFirstTdAttrs.put("valigh", "top");
0871: //
0872: outputFirstTdInfo
0873: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0874: .newInstance("td", outputFirstTdAttrs));
0875: //
0876: WebPageTagInstanceViewContextInfo outputFirstSubTdInfo = outputFirstTdInfo
0877: .createHtmlInfo();
0878: outputFirstSubTdInfo.setHtmlContent(inTitle + ":", true);
0879: //
0880: ////////////////////////////
0881: //
0882: WebPageTagInstanceViewContextInfo outputSecondTdInfo = null;
0883: //
0884: HashMap outputSecondTdAttrs = new HashMap();
0885: outputSecondTdAttrs.put("width", "75%");
0886: outputSecondTdAttrs.put("colspan", "3");
0887: //
0888: if (inCtchar.getValueLength() > 0) {
0889: //
0890: outputSecondTdInfo = outputTrInfo.createHtmlInfo();
0891: //
0892: outputSecondTdInfo
0893: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0894: .newInstance("td", outputSecondTdAttrs));
0895: //
0896: WebPageTagInstanceViewContext.displayView(inCtchar,
0897: outputSecondTdInfo, inWptivc);
0898: } else {
0899: //
0900: outputSecondTdInfo = outputTrInfo
0901: .createHtmlInfo(inCtconName);
0902: //
0903: outputSecondTdInfo
0904: .setHtmlContent(WebPageTagInstanceViewContextSubHtmlInfo
0905: .newInstance("td", outputSecondTdAttrs));
0906: //
0907: WebPageTagInstanceViewContextInfo outputSecondSubTdInfo = outputSecondTdInfo
0908: .createHtmlInfo();
0909: outputSecondSubTdInfo.setHtmlContent("(No " + inTitle
0910: + " - Click Here To Add)", true);
0911: //WebPageTagInstanceViewContext.displayView(
0912: // this.outputCtchar, outputSecondTdInfo, wptivc);
0913: }
0914: }
0915:
0916: //
0917: //
0918: //
0919: public void determineClass(DetermineClassConceptTagContext inDcctc) {
0920:
0921: //declare variables
0922: //ConceptTagHelper.declareVariableInDetermineClassIfValid(
0923: // this.parameterCtchar,
0924: // PARAMETER_CTCON_NAME_CTCTEMP, PARAMETER_CTCON_TYPE_CTCTEMP,
0925: // inDcctc);
0926:
0927: //
0928: //ConceptTagHelper.declareVariableInDetermineClassIfValid(
0929: // this.resultCtchar,
0930: // RESULT_CTCON_NAME_CTCTEMP, RESULT_CTCON_TYPE_CTCTEMP,
0931: // inDcctc);
0932:
0933: String localResultType = getResultType();
0934: Class deterClass = StandardDataTypes
0935: .getActualClass(localResultType);
0936: if (deterClass != null) {
0937: inDcctc.setDetermineClass(deterClass);
0938: } else {
0939: inDcctc.setDetermineClass(StandardDataTypes.getAnyClass());
0940: }
0941: }
0942:
0943: //
0944: public void determineValueAndClass(
0945: DetermineValueAndClassConceptTagContext inDvacctc) {
0946:
0947: //ArrayList declaredLocalVariables = new ArrayList();
0948: //
0949: HashMap previousGlobalVariables[] = new HashMap[1];
0950: HashMap previousParentLocalVariables[] = new HashMap[1];
0951: HashMap previousLocalVariables[] = new HashMap[1];
0952: //
0953: ConceptTagFlagsHelper.suspendAllVariables(inDvacctc,
0954: previousGlobalVariables, previousParentLocalVariables,
0955: previousLocalVariables);
0956:
0957: try {
0958: //
0959: //declare result variable
0960: //
0961: String resultName = null;
0962: if (this .resultCtchar.getValueLength() > 0) {
0963: ConceptTagCharacteristicHolder resultCtcharh = this .resultCtchar
0964: .getValueAsHolder(0, inDvacctc);
0965: //
0966: ConceptTagCharacteristic nameCtchar = resultCtcharh
0967: .getCharacteristic(RESULT_CTCON_NAME_CTCTEMP);
0968: ConceptTagCharacteristic typeCtchar = resultCtcharh
0969: .getCharacteristic(RESULT_CTCON_TYPE_CTCTEMP);
0970: ConceptTagCharacteristic valueCtchar = resultCtcharh
0971: .getCharacteristic(RESULT_CTCON_VALUE_CTCTEMP);
0972: //
0973: resultName = nameCtchar.getValueAsString(0, inDvacctc);
0974: //
0975: String resultType = typeCtchar.getValueAsString(0,
0976: inDvacctc);
0977: Class resultClass = StandardDataTypes
0978: .getActualClass(resultType);
0979: Object resultValue = ConceptTagHelper
0980: .getStandardValueFromChar(valueCtchar,
0981: resultType, 0, inDvacctc);
0982: //
0983: ConceptTagFlagsHelper.createLocalVariable(inDvacctc,
0984: resultClass, resultName, resultValue);
0985: }
0986: //
0987: //initialize parameters
0988: //
0989: String paramNames[] = getParameterNames();
0990: ValueAndClassForConceptTag paramValues[] = ConceptTagFlagsHelper
0991: .getMacroCallVacs(inDvacctc);
0992: for (int i = 0; i < paramNames.length; i++) {
0993: ValueAndClassForConceptTag nextVac = paramValues[i];
0994: ConceptTagFlagsHelper.createLocalVariable(inDvacctc,
0995: nextVac.getValueClass(), paramNames[i], nextVac
0996: .getValue());
0997: }
0998:
0999: //
1000: //call actions
1001: //
1002: for (int i = 0; i < this .actionCtchar.getValueLength(); i++) {
1003: this .actionCtchar.getDetermineValueAndClass(i,
1004: inDvacctc);
1005: }
1006:
1007: //
1008: //generate output
1009: //
1010: this .outputCtchar.processIterativeStructure(inDvacctc);
1011:
1012: //
1013: //establish result
1014: //
1015: if (resultName != null) {
1016: //
1017: ValueAndClassForConceptTag resultVac = ConceptTagFlagsHelper
1018: .accessLocalVariable(inDvacctc, resultName);
1019: //
1020: inDvacctc.setDetermineValueAndClass(resultVac);
1021: } else {
1022: inDvacctc
1023: .setDetermineValueAndClass(ValueAndClassForConceptTag
1024: .newNothing());
1025: }
1026: } catch (DetermineValueAndClassConceptTagException dvaccte) {
1027: inDvacctc.setDetermineException(dvaccte);
1028: } finally {
1029: ConceptTagFlagsHelper.reinstateAllVariables(inDvacctc,
1030: previousGlobalVariables,
1031: previousParentLocalVariables,
1032: previousLocalVariables);
1033: }
1034: }
1035:
1036: //
1037: //
1038: //
1039: //
1040: //
1041: //
1042: //
1043: public boolean isSignatureMatch(String inName,
1044: String inParameterTypes[]) {
1045:
1046: boolean outValue = true;
1047:
1048: //
1049: outValue &= getName().equals(inName);
1050: //
1051: String localParamTypes[] = getParameterTypes();
1052: if (inParameterTypes.length == localParamTypes.length) {
1053: for (int i = 0; i < inParameterTypes.length; i++) {
1054: outValue &= (inParameterTypes[i])
1055: .equals(localParamTypes[i]);
1056: }
1057: } else {
1058: outValue &= false;
1059: }
1060:
1061: return outValue;
1062: }
1063:
1064: //
1065: public String getResultType() {
1066:
1067: String outValue = null;
1068:
1069: //
1070: if (this .resultCtchar.getValueLength() > 0
1071: && !isErrorPresent(this .resultCtchar)) {
1072: //
1073: ConceptTagCharacteristicHolder resultCtcharh = this .resultCtchar
1074: .getValueAsHolder(0, null);
1075: ConceptTagCharacteristic typeCtchar = resultCtcharh
1076: .getCharacteristic(RESULT_CTCON_TYPE_CTCTEMP);
1077: //
1078: outValue = typeCtchar.getValueAsString(0, null);
1079: } else {
1080: HashMap ctdn = StandardDataTypes.getClassToDisplayName();
1081: Class nothingClass = StandardDataTypes.getNothingClass();
1082:
1083: outValue = ((String) ctdn.get(nothingClass));
1084: }
1085:
1086: return outValue;
1087: }
1088:
1089: //
1090: public String getName() {
1091: return this .nameCtchar.getValueAsString(0, null);
1092: }
1093:
1094: //
1095: public int getParameterCount() {
1096: return this .parameterCtchar.getValueLength();
1097: }
1098:
1099: //
1100: public String[] getParameterNames() {
1101:
1102: String outValue[] = new String[getParameterCount()];
1103:
1104: for (int i = 0; i < getParameterCount(); i++) {
1105: outValue[i] = getParameterName(i);
1106: }
1107:
1108: return outValue;
1109: }
1110:
1111: public String getParameterName(int inIndex) {
1112:
1113: String outValue = null;
1114:
1115: //
1116: ConceptTagCharacteristicHolder paramCtcharh = this .parameterCtchar
1117: .getValueAsHolder(inIndex, null);
1118: //
1119: ConceptTagCharacteristic nameCtchar = paramCtcharh
1120: .getCharacteristic(PARAMETER_CTCON_NAME_CTCTEMP);
1121: //
1122: outValue = nameCtchar.getValueAsString(0, null);
1123:
1124: return outValue;
1125: }
1126:
1127: //
1128: public String[] getParameterTypes() {
1129:
1130: String outValue[] = new String[getParameterCount()];
1131:
1132: for (int i = 0; i < getParameterCount(); i++) {
1133: outValue[i] = getParameterType(i);
1134: }
1135:
1136: return outValue;
1137: }
1138:
1139: public String getParameterType(int inIndex) {
1140:
1141: String outValue = null;
1142:
1143: //
1144: ConceptTagCharacteristicHolder paramCtcharh = this .parameterCtchar
1145: .getValueAsHolder(inIndex, null);
1146: //
1147: ConceptTagCharacteristic typeCtchar = paramCtcharh
1148: .getCharacteristic(PARAMETER_CTCON_TYPE_CTCTEMP);
1149: //
1150: outValue = typeCtchar.getValueAsString(0, null);
1151:
1152: return outValue;
1153: }
1154:
1155: //
1156: public boolean isSignatureValid() {
1157: //
1158: boolean outValue = true;
1159:
1160: outValue &= !isErrorPresent(this .nameCtchar);
1161: outValue &= !isErrorPresent(this .parameterCtchar);
1162: outValue &= !isErrorPresent(this .resultCtchar);
1163:
1164: return outValue;
1165: }
1166:
1167: //
1168: private final static boolean isErrorPresent(
1169: ConceptTagCharacteristic inCtchar) {
1170: //
1171: boolean outValue = false;
1172:
1173: ConceptTagMessageHolder ctmh = inCtchar
1174: .getParentMessageHolder();
1175: outValue |= ctmh.isErrorPresent();
1176:
1177: //
1178:
1179: return outValue;
1180: }
1181:
1182: private final static boolean isErrorPresent(
1183: ConceptTagCharacteristicHolder inCtcharh) {
1184: //
1185: boolean outValue = false;
1186:
1187: for (int i = 0; i < inCtcharh.getCharacteristicCount(); i++) {
1188: //
1189: ConceptTagCharacteristic nextCtchar = inCtcharh
1190: .getCharacteristic(i);
1191: //
1192: outValue |= isErrorPresent(nextCtchar);
1193: }
1194: //
1195: if (inCtcharh.getUndefinedCharacteristic() != null) {
1196: outValue |= isErrorPresent(inCtcharh
1197: .getUndefinedCharacteristic());
1198: }
1199:
1200: return outValue;
1201: }
1202:
1203: public Object createUninitializedSelf() {
1204: return new TaglibDeclareMacroWebPageTag();
1205: }
1206: }
|