Author: nbelaevski
Date: 2009-10-30 19:28:08 -0400 (Fri, 30 Oct 2009)
New Revision: 15787
Added:
root/ui-sandbox/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java
Removed:
root/framework/trunk/impl/src/main/java/org/ajax4jsf/renderkit/ComponentUtils.java
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java
Modified:
root/framework/trunk/impl/pom.xml
root/framework/trunk/impl/src/main/java/org/ajax4jsf/application/DebugOutputMaker.java
root/framework/trunk/version-matrix/pom.xml
root/ui-sandbox/trunk/components/tables/ui/
Log:
https://jira.jboss.org/jira/browse/RF-8059
https://jira.jboss.org/jira/browse/RF-7556
Modified: root/framework/trunk/impl/pom.xml
===================================================================
--- root/framework/trunk/impl/pom.xml 2009-10-30 14:55:22 UTC (rev 15786)
+++ root/framework/trunk/impl/pom.xml 2009-10-30 23:28:08 UTC (rev 15787)
@@ -124,10 +124,6 @@
<dependencies>
<dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- </dependency>
- <dependency>
<groupId>${project.groupId}</groupId>
<artifactId>richfaces-api</artifactId>
</dependency>
Modified:
root/framework/trunk/impl/src/main/java/org/ajax4jsf/application/DebugOutputMaker.java
===================================================================
---
root/framework/trunk/impl/src/main/java/org/ajax4jsf/application/DebugOutputMaker.java 2009-10-30
14:55:22 UTC (rev 15786)
+++
root/framework/trunk/impl/src/main/java/org/ajax4jsf/application/DebugOutputMaker.java 2009-10-30
23:28:08 UTC (rev 15787)
@@ -21,30 +21,32 @@
package org.ajax4jsf.application;
-import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
+import java.util.Map.Entry;
+import javax.el.Expression;
+import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.Resource;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.ValueBinding;
import javax.faces.event.PhaseId;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.ajax4jsf.Messages;
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.beanutils.PropertyUtils;
/**
@@ -56,10 +58,10 @@
private final static String LT = "<";
private final static String GT = ">";
// Attributes that should not be printed
- static public final HashSet IGNORE_ATTRIBUTES;
+ static public final Set<String> IGNORE_ATTRIBUTES;
static {
- IGNORE_ATTRIBUTES = new HashSet();
+ IGNORE_ATTRIBUTES = new HashSet<String>();
IGNORE_ATTRIBUTES.add("attributes");
IGNORE_ATTRIBUTES.add("children");
IGNORE_ATTRIBUTES.add("childCount");
@@ -265,21 +267,20 @@
out.println("<dd id='"+clientId+"'
style='display:none;' class='tree' ><ul
class='tree'>");
// out bean properties
try {
- PropertyDescriptor propertyDescriptors[] =
PropertyUtils.getPropertyDescriptors(component);
- for (int i = 0; i < propertyDescriptors.length; i++) {
- if (PropertyUtils.isReadable(component,propertyDescriptors[i].getName())) {
- String name = propertyDescriptors[i].getName();
- ValueBinding vb = component.getValueBinding(name);
- if (vb != null) {
- writeAttribute(out, name, vb.getExpressionString());
- } else {
- if (!IGNORE_ATTRIBUTES.contains(name)) {
- try {
- String value = BeanUtils.getProperty(component,name);
- writeAttribute(out, name, value);
- } catch (Exception e) {
- writeAttribute(out, name, null);
- }
+ Map<String, Object> attributes = component.getAttributes();
+ List<String> attributeNamesList = new
ArrayList<String>(attributes.keySet());
+ Collections.sort(attributeNamesList);
+ for (String attributeName : attributeNamesList) {
+ ValueExpression ve = component.getValueExpression(attributeName);
+ if (ve != null) {
+ writeAttribute(out, attributeName, ve.getExpressionString());
+ } else {
+ if (!IGNORE_ATTRIBUTES.contains(attributeName)) {
+ try {
+ Object value = attributes.get(attributeName);
+ writeAttribute(out, attributeName, value);
+ } catch (Exception e) {
+ writeAttribute(out, attributeName, null);
}
}
}
@@ -290,27 +291,29 @@
// out bindings
// out attributes map
- for (Iterator it = component.getAttributes().entrySet().iterator(); it
+ for (Iterator<Entry<String, Object>> it =
component.getAttributes().entrySet().iterator(); it
.hasNext();) {
- Map.Entry entry = (Map.Entry) it.next();
- writeAttribute(out, (String) entry.getKey(), entry.getValue());
+ Entry<String, Object> entry = it.next();
+ writeAttribute(out, entry.getKey(), entry.getValue());
}
// out listeners
out.println("</ul></dd>");
- if (component.getFacetsAndChildren().hasNext()) {
+ if (component.getFacetCount() > 0 || component.getChildCount() > 0) {
out.println("<dd class='tree_childs'><dl
class='tree_childs'>");
// out childs of this component
// facets
- for (Iterator facetEntry = component.getFacets().entrySet()
- .iterator(); facetEntry.hasNext();) {
- Map.Entry entry = (Map.Entry) facetEntry.next();
- writeComponent(context, out,
- (UIComponent) entry.getValue(), (String) entry.getKey());
+ Map<String, UIComponent> facetsMap = component.getFacets();
+ List<String> facetNamesList = new ArrayList<String>(facetsMap.keySet());
+ Collections.sort(facetNamesList);
+
+ for (String nextFacetName : facetNamesList) {
+ writeComponent(context, out, facetsMap.get(nextFacetName), nextFacetName);
}
+
// childs components
- for (Iterator childIter = component.getChildren().iterator(); childIter
+ for (Iterator<UIComponent> childIter = component.getChildren().iterator();
childIter
.hasNext();) {
- UIComponent child = (UIComponent) childIter.next();
+ UIComponent child = childIter.next();
writeComponent(context, out, child, null);
}
out.println("</dl></dd>");
@@ -333,10 +336,8 @@
out.print("[id:");
out.print(((UIComponent) value).getId());
out.print(']');
- } else if (value instanceof MethodBinding) {
- out.print(((MethodBinding) value).getExpressionString());
- } else if (value instanceof ValueBinding) {
- out.print(((ValueBinding) value).getExpressionString());
+ } else if (value instanceof Expression) {
+ out.print(((Expression) value).getExpressionString());
} else {
out.print(value.toString());
}
@@ -356,17 +357,17 @@
writeVariables(out, ctx.getApplicationMap(), "Application
Attributes");
}
- private void writeVariables(PrintWriter out, Map vars, String caption) {
+ private <K, V> void writeVariables(PrintWriter out, Map<K, V> vars,
String caption) {
out.print("<table><caption>");
out.print(caption);
out.println("</caption><thead><tr><th
style=\"width: 10%; \">Name</th><th style=\"width: 90%;
\">Value</th></tr></thead><tbody>");
boolean written = false;
if (!vars.isEmpty()) {
- SortedMap map = new TreeMap(vars);
- Map.Entry entry = null;
+ SortedMap<K, V> map = new TreeMap<K, V>(vars);
+ Map.Entry<K, V> entry = null;
String key = null;
- for (Iterator itr = map.entrySet().iterator(); itr.hasNext(); ) {
- entry = (Map.Entry) itr.next();
+ for (Iterator<Entry<K, V>> itr = map.entrySet().iterator();
itr.hasNext(); ) {
+ entry = itr.next();
key = entry.getKey().toString();
if (key.indexOf('.') == -1) {
out.println("<tr><td>");
@@ -375,26 +376,28 @@
Object value = entry.getValue();
out.println(value.toString().replaceAll("<",
LT).replaceAll(">", GT));
out.println("</span>");
- try {
- PropertyDescriptor propertyDescriptors[] =
PropertyUtils.getPropertyDescriptors(value);
- if (propertyDescriptors.length>0) {
- out.print("<div class='properties'><ul
class=\'properties\'>");
- for (int i = 0; i < propertyDescriptors.length; i++) {
- String beanPropertyName = propertyDescriptors[i].getName();
- if (PropertyUtils.isReadable(value,beanPropertyName
- )) {
- out.print("<li class=\'properties\'>");
- out.print(beanPropertyName+" =
"+BeanUtils.getProperty(value,beanPropertyName));
- out.print("</li>");
+
+ //TODO - commented after beanutils dependency removed - review
+// try {
+// PropertyDescriptor propertyDescriptors[] =
PropertyUtils.getPropertyDescriptors(value);
+// if (propertyDescriptors.length>0) {
+// out.print("<div class='properties'><ul
class=\'properties\'>");
+// for (int i = 0; i < propertyDescriptors.length; i++) {
+// String beanPropertyName = propertyDescriptors[i].getName();
+// if (PropertyUtils.isReadable(value,beanPropertyName
+// )) {
+// out.print("<li class=\'properties\'>");
+// out.print(beanPropertyName+" =
"+BeanUtils.getProperty(value,beanPropertyName));
+// out.print("</li>");
+//
+// }
+// }
+// out.print("</ul></div>");
+// }
+// } catch (Exception e) {
+// // TODO: log exception
+// }
- }
- }
- out.print("</ul></div>");
- }
- } catch (Exception e) {
- // TODO: log exception
- }
-
out.println("</td></tr>");
written = true;
}
Deleted:
root/framework/trunk/impl/src/main/java/org/ajax4jsf/renderkit/ComponentUtils.java
===================================================================
---
root/framework/trunk/impl/src/main/java/org/ajax4jsf/renderkit/ComponentUtils.java 2009-10-30
14:55:22 UTC (rev 15786)
+++
root/framework/trunk/impl/src/main/java/org/ajax4jsf/renderkit/ComponentUtils.java 2009-10-30
23:28:08 UTC (rev 15787)
@@ -1,134 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.ajax4jsf.renderkit;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-
-import javax.el.MethodNotFoundException;
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-
-import org.ajax4jsf.Messages;
-import org.apache.commons.beanutils.MethodUtils;
-
-/**
- * Utils for working with tempates
- * @author ayukhovich(a)exadel.com (latest modification by $Author: alexsmirnov $)
- * @version $Revision: 1.1.2.1 $ $Date: 2007/01/09 18:58:52 $
- */
-public class ComponentUtils {
- private final static String UTILS_PREFIX = "util.";
- /**
- *
- * @param className
- * @param functionName
- * @param parameters
- * @return
- */
- public static Object callFunction( FacesContext context, UIComponent component,
RendererBase renderer, String functionName, Object[] parameters ) {
-
- Object returnObject = null;
-
- int sizeParameters = 0;
- int sizeArrayParameters = 2;
- if ( parameters != null ) {
- sizeParameters = parameters.length;
- sizeArrayParameters = 3;
- }
-
- Object[][] arrayParameters = new Object[sizeArrayParameters][];
- arrayParameters[0] = new Object[sizeParameters+2];
- arrayParameters[1] = new Object[sizeParameters+1];
-
- if ( sizeParameters != 0 ) {
- arrayParameters[2] = new Object[sizeParameters];
- }
-
- arrayParameters[0][0] = context;
- arrayParameters[0][1] = component;
- arrayParameters[1][0] = component;
-
- if ( parameters != null ) {
- for (int iParameter=0;iParameter<parameters.length;iParameter++) {
- arrayParameters[0][iParameter+2] = parameters;
- arrayParameters[1][iParameter+1] = parameters;
- arrayParameters[2][iParameter] = parameters;
- }
- }
-
- String methodName;
- Object object;
- if(functionName.startsWith(UTILS_PREFIX)){
- methodName = functionName.substring(UTILS_PREFIX.length());
- object = renderer.getUtils();
- } else {
- object = renderer;
- methodName = functionName;
- }
-
-
- returnObject = invokeMethod(object, methodName, arrayParameters );
-
- return returnObject;
- }
-
- /**
- * Invoke a named method whose parameter type matches the object type.
- * @param objects - invoke method on this object
- * @param methodName - get method with this name
- * @param arrayParameters - use these arguments - treat null as empty array
- * @return
- */
- private static Object invokeMethod(Object object, String methodName, Object[][]
arrayParameters) {
-
- try {
- for (int iParameter = 0; iParameter < arrayParameters.length; iParameter++) {
- try {
- return MethodUtils.invokeMethod(object, methodName, arrayParameters[iParameter]);
- } catch (NoSuchMethodException e) {
- continue;
- }
- }
- } catch (InvocationTargetException e) {
- throw new FacesException(Messages.getMessage(Messages.METHOD_CALL_ERROR_2b,
methodName, e.getCause().getMessage()), e);
- } catch (IllegalAccessException e) {
- throw new FacesException(Messages.getMessage(Messages.METHOD_CALL_ERROR_4b,
methodName, e.getMessage()), e);
- }
- throw new MethodNotFoundException(Messages.getMessage(Messages.METHOD_CALL_ERROR_6b,
methodName, object));
- }
-
- /**
- * Write html-attribute
- * @param writer
- * @param attribute
- * @param value
- * @throws IOException
- */
- public static void writeAttribute(ResponseWriter writer, String attribute, Object value
) throws IOException {
- if ( (value != null) && (value.toString().length()!=0) ) {
- writer.writeAttribute(attribute, value.toString(), attribute );
- }
- }
-}
Modified: root/framework/trunk/version-matrix/pom.xml
===================================================================
--- root/framework/trunk/version-matrix/pom.xml 2009-10-30 14:55:22 UTC (rev 15786)
+++ root/framework/trunk/version-matrix/pom.xml 2009-10-30 23:28:08 UTC (rev 15787)
@@ -231,11 +231,6 @@
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.7.0</version>
- </dependency>
<!-- -->
<!-- TODO: legacy dependnecies -->
Deleted:
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java
===================================================================
---
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java 2009-10-30
14:55:22 UTC (rev 15786)
+++
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java 2009-10-30
23:28:08 UTC (rev 15787)
@@ -1,114 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.ajax4jsf.component;
-
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.faces.FacesException;
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIComponentBase;
-import javax.faces.context.FacesContext;
-
-import org.ajax4jsf.component.AjaxDataEncoder;
-import org.ajax4jsf.renderkit.AjaxChildrenRenderer;
-import org.apache.commons.beanutils.PropertyUtils;
-
-/**
- * Base class for component, performed AJAX encoding on selected values in
- * iterable components ( UIData, trees etc )
- *
- * @author shura
- *
- */
-public abstract class UISelector extends UIComponentBase implements
- AjaxDataEncoder {
-
- private static final AjaxChildrenRenderer childrenRenderer = new AjaxChildrenRenderer()
{
-
- protected Class<? extends UIComponent> getComponentClass() {
- return UISelector.class;
- }
-
- };
-
- /**
- * Name of serRow ( or simple ) method for setup current value in iterable
- * component
- *
- * @parameter
- * @return the acceptClass
- */
- public abstract String getIterationProperty();
-
- /**
- * @param newSelectMethod
- * the value to set
- */
- public abstract void setIterationProperty(String newSelectMethod);
-
- /*
- * (non-Javadoc)
- *
- * @see
org.ajax4jsf.framework.ajax.AjaxChildrenEncoder#encodeAjaxChild(javax.faces.context.FacesContext,
- * java.lang.String, java.util.Set, java.util.Set)
- */
- public void encodeAjaxChild(FacesContext context, String path,
- Set<String> ids, Set<String> renderedAreas) throws IOException {
- if (getChildCount() != 1) {
- throw new FacesException("Selector component must have one, and only one,
child");
- }
- UIComponent child = (UIComponent) getChildren().get(0);
- Set<Object> ajaxKeys = getAjaxKeys();
- if (null != ajaxKeys) {
- String iterationProperty = getIterationProperty();
- try {
- Object savedKey = PropertyUtils.getProperty(child,
- iterationProperty);
- for (Iterator<Object> iter = ajaxKeys.iterator(); iter.hasNext();) {
- Object key = (Object) iter.next();
- PropertyUtils.setProperty(child, iterationProperty, key);
- if (true) {
- childrenRenderer.encodeAjaxChildren(context, this, path,
- ids, renderedAreas);
- }
-
- }
- PropertyUtils.setProperty(child, iterationProperty, savedKey);
-
- } catch (IllegalAccessException e) {
- throw new FacesException(
- "Illegal access to iteration selection property "+iterationProperty+"
on component "+child.getClientId(context),e);
- } catch (InvocationTargetException e) {
- throw new FacesException(
- "Error in iteration selection property "+iterationProperty+" on
component "+child.getClientId(context),e.getCause());
- } catch (NoSuchMethodException e) {
- throw new FacesException(
- "No iteration selection property "+iterationProperty+" on component
"+child.getClientId(context),e);
- }
- }
-
- }
-
-}
Copied:
root/ui-sandbox/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java
(from rev 15786,
root/ui/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java)
===================================================================
---
root/ui-sandbox/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java
(rev 0)
+++
root/ui-sandbox/trunk/components/core/src/main/java/org/ajax4jsf/component/UISelector.java 2009-10-30
23:28:08 UTC (rev 15787)
@@ -0,0 +1,114 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.component;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.component.AjaxDataEncoder;
+import org.ajax4jsf.renderkit.AjaxChildrenRenderer;
+import org.apache.commons.beanutils.PropertyUtils;
+
+/**
+ * Base class for component, performed AJAX encoding on selected values in
+ * iterable components ( UIData, trees etc )
+ *
+ * @author shura
+ *
+ */
+public abstract class UISelector extends UIComponentBase implements
+ AjaxDataEncoder {
+
+ private static final AjaxChildrenRenderer childrenRenderer = new AjaxChildrenRenderer()
{
+
+ protected Class<? extends UIComponent> getComponentClass() {
+ return UISelector.class;
+ }
+
+ };
+
+ /**
+ * Name of serRow ( or simple ) method for setup current value in iterable
+ * component
+ *
+ * @parameter
+ * @return the acceptClass
+ */
+ public abstract String getIterationProperty();
+
+ /**
+ * @param newSelectMethod
+ * the value to set
+ */
+ public abstract void setIterationProperty(String newSelectMethod);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.ajax4jsf.framework.ajax.AjaxChildrenEncoder#encodeAjaxChild(javax.faces.context.FacesContext,
+ * java.lang.String, java.util.Set, java.util.Set)
+ */
+ public void encodeAjaxChild(FacesContext context, String path,
+ Set<String> ids, Set<String> renderedAreas) throws IOException {
+ if (getChildCount() != 1) {
+ throw new FacesException("Selector component must have one, and only one,
child");
+ }
+ UIComponent child = (UIComponent) getChildren().get(0);
+ Set<Object> ajaxKeys = getAjaxKeys();
+ if (null != ajaxKeys) {
+ String iterationProperty = getIterationProperty();
+ try {
+ Object savedKey = PropertyUtils.getProperty(child,
+ iterationProperty);
+ for (Iterator<Object> iter = ajaxKeys.iterator(); iter.hasNext();) {
+ Object key = (Object) iter.next();
+ PropertyUtils.setProperty(child, iterationProperty, key);
+ if (true) {
+ childrenRenderer.encodeAjaxChildren(context, this, path,
+ ids, renderedAreas);
+ }
+
+ }
+ PropertyUtils.setProperty(child, iterationProperty, savedKey);
+
+ } catch (IllegalAccessException e) {
+ throw new FacesException(
+ "Illegal access to iteration selection property "+iterationProperty+"
on component "+child.getClientId(context),e);
+ } catch (InvocationTargetException e) {
+ throw new FacesException(
+ "Error in iteration selection property "+iterationProperty+" on
component "+child.getClientId(context),e.getCause());
+ } catch (NoSuchMethodException e) {
+ throw new FacesException(
+ "No iteration selection property "+iterationProperty+" on component
"+child.getClientId(context),e);
+ }
+ }
+
+ }
+
+}
Property changes on: root/ui-sandbox/trunk/components/tables/ui
___________________________________________________________________
Name: svn:ignore
- target
.classpath
.project
.settings
+ target
.classpath
.project
.settings
.clover