use of com.webobjects.appserver._private.WODeclaration in project wonder-slim by undur.
the class WOHelperFunctionParser method createDeclaration.
public static WODeclaration createDeclaration(String declarationName, String declarationType, NSMutableDictionary associations) {
WODeclaration declaration = new WODeclaration(declarationName, declarationType, associations);
if (WOHelperFunctionParser._debugSupport && associations != null && associations.objectForKey(WOHTMLAttribute.Debug) == null) {
// associations.setObjectForKey(new WOConstantValueAssociation(Boolean.TRUE), WOHTMLAttribute.Debug);
Enumeration associationsEnum = associations.keyEnumerator();
while (associationsEnum.hasMoreElements()) {
String bindingName = (String) associationsEnum.nextElement();
WOAssociation association = (WOAssociation) associations.objectForKey(bindingName);
association.setDebugEnabledForBinding(bindingName, declarationName, declarationType);
association._setDebuggingEnabled(false);
}
}
return declaration;
}
use of com.webobjects.appserver._private.WODeclaration in project wonder-slim by undur.
the class WOHelperFunctionDeclarationParser method parseDeclarationsWithoutComments.
private NSMutableDictionary parseDeclarationsWithoutComments(String declarationWithoutComment) throws WOHelperFunctionDeclarationFormatException {
NSMutableDictionary declarations = new NSMutableDictionary();
NSMutableDictionary rawDeclarations = _rawDeclarationsWithoutComment(declarationWithoutComment);
String tagName;
WODeclaration declaration;
Enumeration rawDeclarationHeaderEnum = rawDeclarations.keyEnumerator();
while (rawDeclarationHeaderEnum.hasMoreElements()) {
String declarationHeader = (String) rawDeclarationHeaderEnum.nextElement();
String declarationBody = (String) rawDeclarations.objectForKey(declarationHeader);
int colonIndex = declarationHeader.indexOf(':');
if (colonIndex < 0) {
throw new WOHelperFunctionDeclarationFormatException("<WOHelperFunctionDeclarationParser> Missing ':' for declaration:\n" + declarationHeader + " " + declarationBody);
}
tagName = declarationHeader.substring(0, colonIndex).trim();
if (tagName.length() == 0) {
throw new WOHelperFunctionDeclarationFormatException("<WOHelperFunctionDeclarationParser> Missing tag name for declaration:\n" + declarationHeader + " " + declarationBody);
}
if (declarations.objectForKey(tagName) != null) {
throw new WOHelperFunctionDeclarationFormatException("<WOHelperFunctionDeclarationParser> Duplicate tag name '" + tagName + "' in declaration:\n" + declarationBody);
}
String type = declarationHeader.substring(colonIndex + 1).trim();
if (type.length() == 0) {
throw new WOHelperFunctionDeclarationFormatException("<WOHelperFunctionDeclarationParser> Missing element name for declaration:\n" + declarationHeader + " " + declarationBody);
}
NSMutableDictionary associations = _associationsForDictionaryString(declarationHeader, declarationBody);
declaration = WOHelperFunctionParser.createDeclaration(tagName, type, associations);
declarations.setObjectForKey(declaration, tagName);
}
return declarations;
}
use of com.webobjects.appserver._private.WODeclaration in project wonder-slim by undur.
the class WOHelperFunctionParser method parseInlineBindings.
protected WODeclaration parseInlineBindings(String tag, int colonIndex) throws WOHelperFunctionHTMLFormatException {
StringBuffer keyBuffer = new StringBuffer();
StringBuffer valueBuffer = new StringBuffer();
StringBuffer elementTypeBuffer = new StringBuffer();
NSMutableDictionary associations = new NSMutableDictionary();
StringBuffer currentBuffer = elementTypeBuffer;
boolean changeBuffers = false;
boolean inQuote = false;
int length = tag.length();
for (int index = colonIndex + 1; index < length; index++) {
char ch = tag.charAt(index);
if (!inQuote && (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r')) {
changeBuffers = true;
} else if (!inQuote && ch == '=') {
changeBuffers = true;
} else if (inQuote && ch == '\\') {
index++;
if (index == length) {
throw new WOHelperFunctionHTMLFormatException("'" + tag + "' has a '\\' as the last character.");
}
if (tag.charAt(index) == '\"') {
currentBuffer.append("\"");
} else if (tag.charAt(index) == 'n') {
currentBuffer.append('\n');
} else if (tag.charAt(index) == 'r') {
currentBuffer.append('\r');
} else if (tag.charAt(index) == 't') {
currentBuffer.append('\t');
} else {
currentBuffer.append('\\');
currentBuffer.append(tag.charAt(index));
}
} else {
if (changeBuffers) {
if (currentBuffer == elementTypeBuffer) {
currentBuffer = keyBuffer;
} else if (currentBuffer == keyBuffer) {
currentBuffer = valueBuffer;
} else if (currentBuffer == valueBuffer) {
parseInlineAssociation(keyBuffer, valueBuffer, associations);
currentBuffer = keyBuffer;
}
currentBuffer.setLength(0);
changeBuffers = false;
}
if (ch == '"') {
inQuote = !inQuote;
}
currentBuffer.append(ch);
}
}
if (inQuote) {
throw new WOHelperFunctionHTMLFormatException("'" + tag + "' has a quote left open.");
}
if (keyBuffer.length() > 0) {
if (valueBuffer.length() > 0) {
parseInlineAssociation(keyBuffer, valueBuffer, associations);
} else {
throw new WOHelperFunctionHTMLFormatException("'" + tag + "' defines a key but no value.");
}
}
String elementType = elementTypeBuffer.toString();
String shortcutType = (String) WOHelperFunctionTagRegistry.tagShortcutMap().objectForKey(elementType);
if (shortcutType != null) {
elementType = shortcutType;
} else if (elementType.startsWith(WO_REPLACEMENT_MARKER)) {
// Acts only on tags, where we have "dynamified" inside the tag parser
// this takes the value found after the "wo:" part in the element and generates a WOGenericContainer with that value
// as the elementName binding
elementType = elementType.replaceAll(WO_REPLACEMENT_MARKER, "");
associations.setObjectForKey(WOHelperFunctionAssociation.associationWithValue(elementType), "elementName");
elementType = "WOGenericContainer";
}
String elementName;
synchronized (this) {
elementName = "_" + elementType + "_" + _inlineBindingCount;
_inlineBindingCount++;
}
WOTagProcessor tagProcessor = (WOTagProcessor) WOHelperFunctionTagRegistry.tagProcessorMap().objectForKey(elementType);
WODeclaration declaration;
if (tagProcessor == null) {
declaration = WOHelperFunctionParser.createDeclaration(elementName, elementType, associations);
} else {
declaration = tagProcessor.createDeclaration(elementName, elementType, associations);
}
_declarations.setObjectForKey(declaration, elementName);
processDeclaration(declaration);
return declaration;
}
use of com.webobjects.appserver._private.WODeclaration in project wonder-slim by undur.
the class WOHTMLWebObjectTag method _elementWithDeclaration.
private static WOElement _elementWithDeclaration(WODeclaration wodeclaration, String s, WOElement woelement, NSArray nsarray) throws ClassNotFoundException, WOHelperFunctionDeclarationFormatException {
WOElement woelement1 = null;
if (wodeclaration != null) {
String s1 = wodeclaration.type();
if (s1 != null) {
if (NSLog.debugLoggingAllowedForLevelAndGroups(3, 8388608L)) {
NSLog.debug.appendln("<WOHTMLWebObjectTag> will look for " + s1 + " in the java runtime.");
}
Class class1 = _NSUtilities.classWithName(s1);
if (class1 == null) {
if (NSLog.debugLoggingAllowedForLevelAndGroups(3, 8388608L)) {
NSLog.debug.appendln("<WOHTMLWebObjectTag> will look for com.webobjects.appserver._private." + s1 + " .");
}
class1 = WOBundle.lookForClassInAllBundles(s1);
if (class1 == null) {
NSLog.err.appendln("WOBundle.lookForClassInAllBundles(" + s1 + ") failed!");
} else if (!(com.webobjects.appserver.WODynamicElement.class).isAssignableFrom(class1)) {
class1 = null;
}
}
if (class1 != null) {
if (NSLog.debugLoggingAllowedForLevelAndGroups(3, 8388608L)) {
NSLog.debug.appendln("<WOHTMLWebObjectTag> Will initialize object of class " + s1);
}
if ((com.webobjects.appserver.WOComponent.class).isAssignableFrom(class1)) {
if (NSLog.debugLoggingAllowedForLevelAndGroups(3, 8388608L)) {
NSLog.debug.appendln("<WOHTMLWebObjectTag> will look for " + s1 + " in the Compiled Components.");
}
woelement1 = _componentReferenceWithClassNameDeclarationAndTemplate(s1, wodeclaration, woelement, nsarray);
} else {
woelement1 = _elementWithClass(class1, wodeclaration, woelement);
}
} else {
if (NSLog.debugLoggingAllowedForLevelAndGroups(3, 8388608L)) {
NSLog.debug.appendln("<WOHTMLWebObjectTag> will look for " + s1 + " in the Frameworks.");
}
woelement1 = _componentReferenceWithClassNameDeclarationAndTemplate(s1, wodeclaration, woelement, nsarray);
}
} else {
throw new WOHelperFunctionDeclarationFormatException("<WOHTMLWebObjectTag> declaration object for dynamic element (or component) named " + s + "has no class name.");
}
} else {
throw new WOHelperFunctionDeclarationFormatException("<WOHTMLTemplateParser> no declaration for dynamic element (or component) named " + s);
}
WOGenerationSupport.insertInElementsTableWithName(woelement1, s, wodeclaration.associations());
return woelement1;
}
use of com.webobjects.appserver._private.WODeclaration in project wonder-slim by undur.
the class WOHTMLWebObjectTag method dynamicElement.
public WOElement dynamicElement(NSDictionary nsdictionary, NSArray nsarray) throws WOHelperFunctionDeclarationFormatException, ClassNotFoundException {
String s = name();
WOElement woelement = template();
WODeclaration wodeclaration = (WODeclaration) nsdictionary.objectForKey(s);
return _elementWithDeclaration(wodeclaration, s, woelement, nsarray);
}
Aggregations