blob: 8aec83eaa6b13b556331ab64fa978ef17b6d2511 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.ofbiz.widget.model;
import java.io.Serializable;
import java.util.Map;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilGenerics;
import org.ofbiz.base.util.UtilProperties;
import org.w3c.dom.Element;
/**
* Widget Library - Widget model class. ModelWidget is a base class that is
* extended by other widget model classes.
*/
@SuppressWarnings("serial")
public abstract class ModelWidget implements Serializable {
public static final String module = ModelWidget.class.getName();
/**
* The parameter name used to control widget boundary comments. Currently
* set to "widgetVerbose".
*/
public static final String enableBoundaryCommentsParam = "widgetVerbose";
private final String name;
private final String systemId;
private final int startColumn;
private final int startLine;
/**
* Derived classes must call this constructor.
* @param name The widget name
*/
protected ModelWidget(String name) {
this.name = name;
this.systemId = "anonymous";
this.startColumn = 0;
this.startLine = 0;
}
/**
* Derived classes must call this constructor.
* @param widgetElement The XML Element for the widget
*/
protected ModelWidget(Element widgetElement) {
this.name = widgetElement.getAttribute("name");
this.systemId = (String) widgetElement.getUserData("systemId");
this.startColumn = ((Integer) widgetElement.getUserData("startColumn")).intValue();
this.startLine = ((Integer) widgetElement.getUserData("startLine")).intValue();
}
public abstract void accept(ModelWidgetVisitor visitor) throws Exception;
/**
* Returns the widget's name.
* @return Widget's name
*/
public String getName() {
return name;
}
/**
* Returns the url as a string, from where this widget was defined.
* @return url
*/
public String getSystemId() {
return systemId;
}
/**
* Returns the column where this widget was defined, in it's containing xml file.
* @return start column
*/
public int getStartColumn() {
return startColumn;
}
/**
* Returns the line where this widget was defined, in it's containing xml file.
* @return start line
*/
public int getStartLine() {
return startLine;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
ModelWidgetVisitor visitor = new XmlWidgetVisitor(sb);
try {
accept(visitor);
} catch (Exception e) {
Debug.logWarning(e, "Exception thrown in XmlWidgetVisitor: ", module);
}
return sb.toString();
}
/**
* Returns the widget's name to be used in boundary comments. The default action
* is to return the widget's name. Derived classes can override this method to
* return a customized name.
* @return Name to be used in boundary comments
*/
public String getBoundaryCommentName() {
return name;
}
/**
* Returns <code>true</code> if widget boundary comments are enabled. Widget boundary comments are
* enabled by setting <code>widget.verbose=true</code> in the <code>widget.properties</code> file.
* The <code>true</code> setting can be overridden in <code>web.xml</code> or in the screen
* rendering context. If <code>widget.verbose</code> is set to <code>false</code> in the
* <code>widget.properties</code> file, then that setting will override all other settings and
* disable all widget boundary comments.
*
* @param context Optional context Map
*/
public static boolean widgetBoundaryCommentsEnabled(Map<String, ? extends Object> context) {
boolean result = "true".equals(UtilProperties.getPropertyValue("widget", "widget.verbose"));
if (result && context != null) {
String str = (String) context.get(enableBoundaryCommentsParam);
if (str != null) {
result = "true".equals(str);
} else{
Map<String, ? extends Object> parameters = UtilGenerics.checkMap(context.get("parameters"));
if (parameters != null) {
str = (String) parameters.get(enableBoundaryCommentsParam);
if (str != null) {
result = "true".equals(str);
}
}
}
}
return result;
}
}