Merge branch 'master' of ssh://hsh04.hostsharing.net/home/doms/source.hostsharing.net/source/hsadmin

This commit is contained in:
Purodha 2013-01-02 14:43:38 +01:00
commit fd02157854
29 changed files with 238 additions and 93 deletions

View File

@ -8,6 +8,23 @@ public class JSONFormatter {
private int indent = 1;
public String format(Object object) {
if (object == null) return "";
if (object instanceof List<?>) {
return formatList((List<?>) object);
}
if (object instanceof Map<?, ?>) {
return formatMap((Map<?, ?>) object);
}
if (object instanceof String) {
return formatString((String) object);
}
if (object instanceof Object[]) {
return formatArr((Object[]) object);
}
return "an instance of " + object.getClass().getCanonicalName();
}
public String formatMap(Map<?, ?> map) {
StringBuffer result = new StringBuffer();
result.append('{');
@ -61,23 +78,6 @@ public class JSONFormatter {
return result.toString();
}
public String format(Object object) {
if (object == null) return "";
if (object instanceof List<?>) {
return formatList((List<?>) object);
}
if (object instanceof Map<?, ?>) {
return formatMap((Map<?, ?>) object);
}
if (object instanceof String) {
return formatString((String) object);
}
if (object instanceof Object[]) {
return formatArr((Object[]) object);
}
return "an instance of " + object.getClass().getCanonicalName();
}
private void incr() {
indent += 3;
}

View File

@ -20,11 +20,13 @@ public class Main {
String file = cmdParser.getFile();
if (file != null && file.length() > 0) {
if ("-".equals(file)) {
console.println(formatter.format(scriptClient.execute(new InputStreamReader(System.in))));
scriptClient.execute(new InputStreamReader(System.in));
console.println(formatter.format(scriptClient.getLastRpcResult()));
} else {
File fileHandle = new File(file);
try {
console.println(formatter.format(scriptClient.execute(new FileReader(fileHandle))));
scriptClient.execute(new FileReader(fileHandle));
console.println(formatter.format(scriptClient.getLastRpcResult()));
} catch (FileNotFoundException e) {
System.err.println("File not found: " + file);
}
@ -32,13 +34,15 @@ public class Main {
}
String expr = cmdParser.getExpression();
if (expr != null && expr.length() > 0) {
console.println(formatter.format(scriptClient.execute(expr)));
scriptClient.execute(expr);
console.println(formatter.format(scriptClient.getLastRpcResult()));
}
if (cmdParser.isInteractive()) {
String command = console.readInput();
while (!("bye".equals(command.trim()) || "exit".equals(command.trim()) || "quit".equals(command.trim()))) {
try {
console.println(formatter.format(scriptClient.execute(command)));
scriptClient.execute(command);
console.println(formatter.format(scriptClient.getLastRpcResult()));
} catch (Exception e) {
console.println("Error: " + e.getLocalizedMessage() + "\n");
}

View File

@ -23,8 +23,16 @@ public class ScriptClient {
try {
engine.put("casgrantingticket", grantingTicket);
engine.put("xmlrpcclient", rpcClient);
engine.put("xmlrpcLastResult", null);
engine.eval("importClass(java.util.ArrayList);");
engine.eval("importClass(java.util.HashMap);");
engine.eval("function hsaParseParam(val) { " +
"if (val instanceof java.util.List) return val;" +
"if (val instanceof java.util.Map) return val;" +
"if (typeof val === 'object' && val.constructor === Array) { res = hsaParseParamArray(val); } " +
"else if (typeof val === 'object') { res = hsaParseParamObject(val); }; " +
"return res; " +
"}");
engine.eval("function hsaParseParamArray(o) { " +
"var lst = new ArrayList(); " +
"var val = ''; " +
@ -45,6 +53,25 @@ public class ScriptClient {
" hsh.put(key, val); " +
"}; " +
"return hsh; " +
"}");
engine.eval("function hsaToNativeJSObject(val) { " +
"if (val instanceof java.util.List) {" +
" var res = [];" +
" for (i = 0; i < val.size(); i++) {" +
" res[i] = hsaToNativeJSObject(val.get(i));" +
" }" +
" return res;" +
"}" +
"if (val instanceof java.util.Map) {" +
" var res = {};" +
" var iter = val.keySet().iterator();" +
" while (iter.hasNext()) {" +
" var key = iter.next();" +
" res[key] = hsaToNativeJSObject(val.get(key));" +
" }" +
" return res;" +
"}" +
"return val;" +
"};");
} catch (ScriptException e) {
throw new JSCliException(e);
@ -71,8 +98,9 @@ public class ScriptClient {
"params.add(casgrantingticket.getTicket()); " +
"if (typeof json === 'undefined') { json = { where:{}, set:{} } };" +
"if (fct == 'update' || fct == 'add') { params.add(hsaParseParamObject(json['set'])); }; " +
"if (fct == 'update' || fct == 'delete' || fct == 'search') { params.add(hsaParseParamObject(json['where'])); }; " +
"return xmlrpcclient.execute(mod + '.' + fct, params); " +
"if (fct == 'update' || fct == 'delete' || fct == 'search') { params.add(hsaParseParamObject(json['where'])); }; " +
"xmlrpcLastResult = xmlrpcclient.execute(mod + '.' + fct, params);" +
"return hsaToNativeJSObject(xmlrpcLastResult); " +
"};");
} catch (ScriptException e) {
e.printStackTrace();
@ -94,6 +122,7 @@ public class ScriptClient {
public Object execute(String snippet) throws JSCliException {
try {
engine.put("xmlrpcLastResult", null);
return engine.eval(snippet);
} catch (ScriptException e) {
throw new JSCliException(e);
@ -102,10 +131,15 @@ public class ScriptClient {
public Object execute(Reader rd) throws JSCliException {
try {
engine.put("xmlrpcLastResult", null);
return engine.eval(rd);
} catch (ScriptException e) {
throw new JSCliException(e);
}
}
public Object getLastRpcResult() {
return engine.get("xmlrpcLastResult");
}
}

View File

@ -8,6 +8,6 @@
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/xmlrpc-client-3.1.3.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/xmlrpc-common-3.1.3.jar"/>
<classpathentry kind="lib" path="/hsarback/lib/servlet-api-2.4.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/vaadin-6.8.4.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/vaadin-6.8.7.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -82,7 +82,7 @@ public abstract class AbstractModule implements Module, Serializable {
public void buttonClick(ClickEvent event) {
application.getMainWindow().removeWindow(childWindow);
try {
Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
genericForm.transferToHash(map, form);
((InsertAble) thisModule).insertRow(map);
componentFactory.loadData();

View File

@ -1,7 +1,10 @@
package de.hsadmin.web;
public abstract class AbstractProperty {
public abstract class AbstractProperty implements XmlrpcProperty {
@Override
public abstract Object toXmlrpcParam();
public abstract String toStringValue();
}

View File

@ -122,7 +122,7 @@ public abstract class DatabaseModule extends GenericModule {
public List<String> getDatabaseUsers() {
ArrayList<String> list = new ArrayList<String>();
try {
Object callSearch = getApplication().getRemote().callSearch(getUserModuleIdent(), new HashMap<String, AbstractProperty>());
Object callSearch = getApplication().getRemote().callSearch(getUserModuleIdent(), new HashMap<String, XmlrpcProperty>());
if (callSearch instanceof Object[]) {
for (Object row : ((Object[])callSearch)) {
if (row instanceof Map<?, ?>) {

View File

@ -0,0 +1,40 @@
package de.hsadmin.web;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
public class DateProperty extends AbstractProperty {
public static final DateFormat serverDf = DateFormat.getDateInstance(DateFormat.SHORT);
final private Date property;
public DateProperty(Date propertyValue) {
this.property = propertyValue;
}
public DateProperty(String propertyValue) {
Date temp = null;
try {
temp = serverDf.parse(propertyValue);
} catch (ParseException e) {
}
property = temp;
}
@Override
public Object toXmlrpcParam() {
return serverDf.format(property);
}
@Override
public String toStringValue() {
return serverDf.format(property);
}
public Date getDateValue() {
return property;
}
}

View File

@ -4,6 +4,6 @@ import java.util.Map;
public interface DeleteAble {
public void deleteRow(Map<String, AbstractProperty> paramHash) throws HsarwebException;
public void deleteRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException;
}

View File

@ -12,16 +12,16 @@ public abstract class GenericModule extends AbstractModule implements InsertAble
private static final long serialVersionUID = 1L;
public void insertRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
public void insertRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
getApplication().getRemote().callAdd(getModuleConfig().getRemoteName(), paramHash);
}
public void deleteRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
public void deleteRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
getApplication().getRemote().callDelete(getModuleConfig().getRemoteName(), paramHash);
}
public void updateRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
Map<String, AbstractProperty> whereHash = new HashMap<String, AbstractProperty>();
public void updateRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
Map<String, XmlrpcProperty> whereHash = new HashMap<String, XmlrpcProperty>();
String idKey = findIdKey();
whereHash.put(idKey, paramHash.get(idKey));
getApplication().getRemote().callUpdate(getModuleConfig().getRemoteName(), paramHash, whereHash);
@ -43,7 +43,7 @@ public abstract class GenericModule extends AbstractModule implements InsertAble
public List<String> getUsers() {
ArrayList<String> list = new ArrayList<String>();
try {
Object callSearch = getApplication().getRemote().callSearch("user", new HashMap<String, AbstractProperty>());
Object callSearch = getApplication().getRemote().callSearch("user", new HashMap<String, XmlrpcProperty>());
if (callSearch instanceof Object[]) {
for (Object row : ((Object[])callSearch)) {
if (row instanceof Map<?, ?>) {
@ -64,7 +64,7 @@ public abstract class GenericModule extends AbstractModule implements InsertAble
public List<String> getEMailAliases() {
ArrayList<String> list = new ArrayList<String>();
try {
Object callSearch = getApplication().getRemote().callSearch("emailalias", new HashMap<String, AbstractProperty>());
Object callSearch = getApplication().getRemote().callSearch("emailalias", new HashMap<String, XmlrpcProperty>());
if (callSearch instanceof Object[]) {
for (Object row : ((Object[])callSearch)) {
if (row instanceof Map<?, ?>) {
@ -85,7 +85,7 @@ public abstract class GenericModule extends AbstractModule implements InsertAble
public List<String> getDomains() {
ArrayList<String> list = new ArrayList<String>();
try {
Object callSearch = getApplication().getRemote().callSearch("domain", new HashMap<String, AbstractProperty>());
Object callSearch = getApplication().getRemote().callSearch("domain", new HashMap<String, XmlrpcProperty>());
if (callSearch instanceof Object[]) {
for (Object row : ((Object[])callSearch)) {
if (row instanceof Map<?, ?>) {
@ -106,7 +106,7 @@ public abstract class GenericModule extends AbstractModule implements InsertAble
public List<String> getPackets() {
ArrayList<String> list = new ArrayList<String>();
try {
Object callSearch = getApplication().getRemote().callSearch("pac", new HashMap<String, AbstractProperty>());
Object callSearch = getApplication().getRemote().callSearch("pac", new HashMap<String, XmlrpcProperty>());
if (callSearch instanceof Object[]) {
for (Object row : ((Object[])callSearch)) {
if (row instanceof Map<?, ?>) {

View File

@ -35,8 +35,8 @@ public class HomeModule extends AbstractModule implements ComponentFactory, Upda
setComponentFactory(this);
}
public void updateRow(Map<String, AbstractProperty> paramHash) throws HsarwebException {
Map<String, AbstractProperty> whereHash = new HashMap<String, AbstractProperty>();
public void updateRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException {
Map<String, XmlrpcProperty> whereHash = new HashMap<String, XmlrpcProperty>();
String idKey = findIdKey();
whereHash.put(idKey, paramHash.get(idKey));
paramHash.remove(idKey);
@ -94,7 +94,7 @@ public class HomeModule extends AbstractModule implements ComponentFactory, Upda
Button button = new Button(moduleConfig.getLabel("change_password"));
ThemeResource icon = new ThemeResource(moduleConfig.getLabel("change_password_icon"));
button.setIcon(icon);
Map<String, AbstractProperty> whereHash = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> whereHash = new HashMap<String, XmlrpcProperty>();
whereHash.put("name", new StringProperty(application.getRunAs()));
Long key = -1L;
try {
@ -130,7 +130,7 @@ public class HomeModule extends AbstractModule implements ComponentFactory, Upda
public void buttonClick(ClickEvent event) {
application.getMainWindow().removeWindow(childWindow);
try {
Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
map.put("id", new StringProperty(((Long) event.getButton().getData()).toString()));
Iterator<Component> componentIterator = form.getLayout().getComponentIterator();
while (componentIterator.hasNext()) {

View File

@ -4,6 +4,6 @@ import java.util.Map;
public interface InsertAble {
public void insertRow(Map<String, AbstractProperty> paramHash) throws HsarwebException;
public void insertRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException;
}

View File

@ -9,7 +9,7 @@ public class ItemsReader {
public static List<Object> readItemList(MainApplication app, String module, String property) throws HsarwebException {
final List<Object> itemsList = new ArrayList<Object>();
Object custListObj = app.getRemote().callSearch(module, new HashMap<String, AbstractProperty>());
Object custListObj = app.getRemote().callSearch(module, new HashMap<String, XmlrpcProperty>());
if (custListObj instanceof Object[]) {
Object[] custList = (Object[]) custListObj;
for (Object custObj : custList) {

View File

@ -1,9 +1,10 @@
package de.hsadmin.web;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListOfStringsProperty extends AbstractProperty {
public class ListOfStringsProperty implements XmlrpcProperty {
public final List<String> properties;
@ -25,4 +26,8 @@ public class ListOfStringsProperty extends AbstractProperty {
}
return result;
}
public Iterator<String> stringsIterator() {
return properties.iterator();
}
}

View File

@ -18,23 +18,23 @@ public class Remote {
this.app = application;
}
public Object callSearch(String module, Map<String, AbstractProperty> where) throws HsarwebException {
public Object callSearch(String module, Map<String, XmlrpcProperty> where) throws HsarwebException {
return xmlrpcCall(module, "search", buildXmlrpcParam(where));
}
public void callAdd(String module, Map<String, AbstractProperty> set) throws HsarwebException {
public void callAdd(String module, Map<String, XmlrpcProperty> set) throws HsarwebException {
xmlrpcCall(module, "add", buildXmlrpcParam(set));
}
public void callUpdate(String module, Map<String, AbstractProperty> set, Map<String, AbstractProperty> where) throws HsarwebException {
public void callUpdate(String module, Map<String, XmlrpcProperty> set, Map<String, XmlrpcProperty> where) throws HsarwebException {
xmlrpcCall(module, "update", buildXmlrpcParam(set), buildXmlrpcParam(where));
}
public void callDelete(String module, Map<String, AbstractProperty> where) throws HsarwebException {
public void callDelete(String module, Map<String, XmlrpcProperty> where) throws HsarwebException {
xmlrpcCall(module, "delete", buildXmlrpcParam(where));
}
private Map<String, Object> buildXmlrpcParam(Map<String, AbstractProperty> paramHash) {
private Map<String, Object> buildXmlrpcParam(Map<String, XmlrpcProperty> paramHash) {
Map<String, Object> resultMap = new HashMap<String, Object>();
if (paramHash == null) {
return null;

View File

@ -2,15 +2,28 @@ package de.hsadmin.web;
public class StringProperty extends AbstractProperty {
public String property ;
final public String property ;
public StringProperty(String property) {
this.property = property;
}
public StringProperty(Object value) {
String temp = "undefined";
if (value instanceof String) {
temp = (String) value;
}
this.property = temp;
}
@Override
public Object toXmlrpcParam() {
return property;
}
@Override
public String toStringValue() {
return property;
}
}

View File

@ -4,6 +4,6 @@ import java.util.Map;
public interface UpdateAble {
public void updateRow(Map<String, AbstractProperty> paramHash) throws HsarwebException;
public void updateRow(Map<String, XmlrpcProperty> paramHash) throws HsarwebException;
}

View File

@ -0,0 +1,7 @@
package de.hsadmin.web;
public interface XmlrpcProperty {
public abstract Object toXmlrpcParam();
}

View File

@ -1,13 +1,13 @@
package de.hsadmin.web.config;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.XmlrpcProperty;
public interface PropertyFieldFactory {
public Object createFieldComponent(PropertyConfig prop, Object value);
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value);
public AbstractProperty getValue(PropertyConfig prop, Object component) throws HsarwebException;
public XmlrpcProperty getValue(PropertyConfig prop, Object component) throws HsarwebException;
public void setReadOnly(boolean readOnly);

View File

@ -11,7 +11,9 @@ import com.vaadin.ui.DateField;
import com.vaadin.ui.PopupDateField;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.DateProperty;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -23,14 +25,21 @@ public class DatePropertyFieldFactory implements PropertyFieldFactory {
private boolean writeOnce = false;
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
DateField dateField = new PopupDateField(prop.getLabel());
dateField.setDateFormat("dd.MM.yyyy");
dateField.setData(prop.getId());
dateField.setWidth(480.0f, Sizeable.UNITS_PIXELS);
try {
if (value != null) {
dateField.setValue(serverDf.parse((String) value));
if (value instanceof AbstractProperty) {
if (value instanceof StringProperty) {
dateField.setValue(DateProperty.serverDf.parse(((StringProperty) value).toStringValue()));
}
if (value instanceof DateProperty) {
dateField.setValue(((DateProperty) value).getDateValue());
}
}
dateField.setReadOnly(isReadOnly());
return dateField;
}

View File

@ -5,6 +5,7 @@ import com.vaadin.ui.TextField;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -14,11 +15,15 @@ public class DefaultPropertyFieldFactory implements PropertyFieldFactory {
private boolean writeOnce = false;
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
TextField tf = new TextField(prop.getLabel());
tf.setData(prop.getId());
tf.setWidth(480.0f, Sizeable.UNITS_PIXELS);
tf.setValue(value != null ? value : prop.getDefaultValue());
String valueOrDefault = prop.getDefaultValue();
if (value instanceof AbstractProperty) {
valueOrDefault = ((AbstractProperty) value).toStringValue();
}
tf.setValue(valueOrDefault);
tf.setReadOnly(isReadOnly());
return tf;
}

View File

@ -1,22 +1,17 @@
/**
*
*/
package de.hsadmin.web.vaadin;
import java.util.HashMap;
import java.util.Map;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Select;
import com.vaadin.ui.VerticalLayout;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.ListOfStringsProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -49,13 +44,13 @@ public class DomainOptionsPropertyFieldFactory implements PropertyFieldFactory {
}
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
// TODO Auto-generated method stub
return null;
}
@Override
public AbstractProperty getValue(PropertyConfig prop, Object component)
public XmlrpcProperty getValue(PropertyConfig prop, Object component)
throws HsarwebException {
return setOptions;
}

View File

@ -1,6 +1,7 @@
package de.hsadmin.web.vaadin;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
@ -18,8 +19,10 @@ import com.vaadin.ui.VerticalLayout;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.GenericModule;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.ListOfStringsProperty;
import de.hsadmin.web.Module;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -61,7 +64,7 @@ public class EMailTargetPropertyFieldFactory implements PropertyFieldFactory {
}
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
GenericModule genModule = (GenericModule) module;
users = genModule.getUsers();
mailAliases = genModule.getEMailAliases();
@ -71,21 +74,21 @@ public class EMailTargetPropertyFieldFactory implements PropertyFieldFactory {
targets = new HashMap<Integer, SingleEMailTarget>();
lastIndex = 0;
if (value instanceof String) {
StringTokenizer tokenizer = new StringTokenizer((String) value, ",");
if (value instanceof AbstractProperty) {
String stringValue = ((AbstractProperty) value).toStringValue();
StringTokenizer tokenizer = new StringTokenizer(stringValue, ",");
while (tokenizer.hasMoreTokens()) {
String target = tokenizer.nextToken().trim();
targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, target));
lastIndex++;
}
}
if (value instanceof Object[]) {
Object[] list = (Object[]) value;
for (Object o : list) {
if (o instanceof String) {
targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, (String) o));
lastIndex++;
}
if (value instanceof ListOfStringsProperty) {
ListOfStringsProperty list = (ListOfStringsProperty) value;
Iterator<String> stringsIterator = list.stringsIterator();
while (stringsIterator.hasNext()) {
targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, stringsIterator.next()));
lastIndex++;
}
}
targets.put(lastIndex, new SingleEMailTarget(this, lastIndex, ""));

View File

@ -10,11 +10,12 @@ import com.vaadin.ui.Component;
import com.vaadin.ui.Form;
import com.vaadin.ui.Layout;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.ListOfStringsProperty;
import de.hsadmin.web.MainApplication;
import de.hsadmin.web.Module;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.ModuleConfig;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -48,7 +49,7 @@ public class GenericForm {
try {
MainApplication application = module.getApplication();
ModuleConfig config = module.getModuleConfig();
Map<String, AbstractProperty> where = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> where = new HashMap<String, XmlrpcProperty>();
where.put(findIdKey(), new StringProperty(entityId.toString()));
Object searchResult = application.getRemote().callSearch(config.getRemoteName(), where);
if (searchResult instanceof Object[]) {
@ -60,7 +61,18 @@ public class GenericForm {
for (PropertyConfig prop : config.getPropertyList()) {
if (!prop.getPropTableColumn().equals(PropertyTableColumn.INTERNAL_KEY) && prop.isShowInForm()) {
PropertyFieldFactory propFieldFactory = prop.getPropFieldFactory();
Object value = row.get(prop.getId());
Object propValue = row.get(prop.getId());
XmlrpcProperty value = new StringProperty("");
if (propValue instanceof Object[]) {
ListOfStringsProperty list = new ListOfStringsProperty();
for (Object o : ((Object[]) propValue)) {
list.add(o.toString());
}
value = list;
}
if (propValue instanceof String) {
value = new StringProperty(propValue);
}
Component component = (Component) propFieldFactory.createFieldComponent(prop, value);
if (propFieldFactory.isWriteOnce()) {
component.setReadOnly(true);
@ -81,7 +93,7 @@ public class GenericForm {
try {
MainApplication application = module.getApplication();
ModuleConfig config = module.getModuleConfig();
Map<String, AbstractProperty> where = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> where = new HashMap<String, XmlrpcProperty>();
where.put(findIdKey(), new StringProperty(entityId.toString()));
Object searchResult = application.getRemote().callSearch(config.getRemoteName(), where);
if (searchResult instanceof Object[]) {
@ -96,7 +108,8 @@ public class GenericForm {
&& prop.getPropTableColumn().equals(PropertyTableColumn.DISPLAY)) {
PropertyFieldFactory propFieldFactory = prop.getPropFieldFactory();
Object value = row.get(prop.getId());
Component component = (Component) propFieldFactory.createFieldComponent(prop, value);
StringProperty propValue = new StringProperty(value);
Component component = (Component) propFieldFactory.createFieldComponent(prop, propValue);
component.setReadOnly(true);
layout.addComponent(component);
}
@ -123,7 +136,7 @@ public class GenericForm {
return idKey;
}
public void transferToHash(Map<String, AbstractProperty> map, Form form) throws HsarwebException {
public void transferToHash(Map<String, XmlrpcProperty> map, Form form) throws HsarwebException {
Iterator<Component> iterator = form.getLayout().getComponentIterator();
Object formData = form.getData();
if (formData != null && formData instanceof Long) {

View File

@ -11,6 +11,7 @@ import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.Module;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.ModuleConfig;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -28,7 +29,7 @@ public class PacPrefixedNamePropertyFieldFactory implements PropertyFieldFactory
}
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
ModuleConfig config = module.getModuleConfig();
HorizontalLayout layout = new HorizontalLayout();
layout.setCaption(prop.getLabel());
@ -55,7 +56,10 @@ public class PacPrefixedNamePropertyFieldFactory implements PropertyFieldFactory
tf.setData(prop.getId());
tf.setWidth(384.0f, Sizeable.UNITS_PIXELS);
layout.addComponent(tf);
String valueOrDefault = (value != null && value instanceof String) ? ((String) value) : prop.getDefaultValue();
String valueOrDefault = prop.getDefaultValue();
if (value instanceof AbstractProperty) {
valueOrDefault = ((AbstractProperty) value).toStringValue();
}
if (valueOrDefault.length() >= 5) {
sel.setValue(valueOrDefault.substring(0, 5));
tf.setValue(valueOrDefault.length() > 6 ? valueOrDefault.substring(6) : "");

View File

@ -8,6 +8,7 @@ import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.Module;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.ModuleConfig;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -24,7 +25,7 @@ public class PasswordPropertyFieldFactory implements PropertyFieldFactory {
}
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
ModuleConfig config = module.getModuleConfig();
VerticalLayout layout = new VerticalLayout();
layout.setCaption(prop.getLabel());
@ -32,13 +33,17 @@ public class PasswordPropertyFieldFactory implements PropertyFieldFactory {
PasswordField tf1 = new PasswordField(config.getLabel(prop.getId() + "1"));
tf1.setData(prop.getId());
tf1.setWidth(480.0f, Sizeable.UNITS_PIXELS);
tf1.setValue(value != null ? value : prop.getDefaultValue());
String valueOrDefault = prop.getDefaultValue();
if (value instanceof AbstractProperty) {
valueOrDefault = ((AbstractProperty) value).toStringValue();
}
tf1.setValue(valueOrDefault);
tf1.setReadOnly(readOnly);
layout.addComponent(tf1);
PasswordField tf2 = new PasswordField(config.getLabel(prop.getId() + "2"));
tf2.setData(prop.getId());
tf2.setWidth(480.0f, Sizeable.UNITS_PIXELS);
tf2.setValue(value != null ? value : prop.getDefaultValue());
tf2.setValue(valueOrDefault);
tf2.setReadOnly(readOnly);
layout.addComponent(tf2);
return layout;

View File

@ -8,6 +8,7 @@ import com.vaadin.ui.Select;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.PropertyConfig;
import de.hsadmin.web.config.PropertyFieldFactory;
@ -17,7 +18,7 @@ public class SelectPropertyFieldFactory implements PropertyFieldFactory {
private boolean writeOnce = false;
@Override
public Object createFieldComponent(PropertyConfig prop, Object value) {
public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) {
Select sel = new Select(prop.getLabel());
sel.setData(prop.getId());
sel.setNullSelectionAllowed(false);
@ -28,7 +29,11 @@ public class SelectPropertyFieldFactory implements PropertyFieldFactory {
sel.setItemCaption(key, selectValues.get(key));
}
sel.setWidth(480.0f, Sizeable.UNITS_PIXELS);
sel.setValue(value != null ? value : prop.getDefaultValue());
String valueOrDefault = prop.getDefaultValue();
if (value instanceof AbstractProperty) {
valueOrDefault = ((AbstractProperty) value).toStringValue();
}
sel.setValue(valueOrDefault);
sel.setReadOnly(readOnly);
sel.setInvalidAllowed(prop.newItemsAllowed());
return sel;

View File

@ -21,13 +21,13 @@ import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.BaseTheme;
import de.hsadmin.web.AbstractProperty;
import de.hsadmin.web.DeleteAble;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.MainApplication;
import de.hsadmin.web.Module;
import de.hsadmin.web.StringProperty;
import de.hsadmin.web.UpdateAble;
import de.hsadmin.web.XmlrpcProperty;
import de.hsadmin.web.config.ComponentFactory;
import de.hsadmin.web.config.LocaleConfig;
import de.hsadmin.web.config.ModuleConfig;
@ -108,7 +108,7 @@ public class TableComponentFactory implements ComponentFactory, Serializable {
table.removeAllItems();
try {
ModuleConfig moduleConfig = module.getModuleConfig();
Object callSearch = module.getApplication().getRemote().callSearch(moduleConfig.getRemoteName(), new HashMap<String, AbstractProperty>());
Object callSearch = module.getApplication().getRemote().callSearch(moduleConfig.getRemoteName(), new HashMap<String, XmlrpcProperty>());
List<PropertyConfig> propertyList = moduleConfig.getPropertyList();
if (callSearch instanceof Object[]) {
for (Object row : ((Object[])callSearch)) {
@ -230,7 +230,7 @@ public class TableComponentFactory implements ComponentFactory, Serializable {
public void buttonClick(ClickEvent event) {
application.getMainWindow().removeWindow(childWindow);
try {
Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
genericForm.transferToHash(map, form);
((UpdateAble) module).updateRow(map);
loadData();
@ -289,7 +289,7 @@ public class TableComponentFactory implements ComponentFactory, Serializable {
public void buttonClick(ClickEvent event) {
application.getMainWindow().removeWindow(childWindow);
try {
Map<String, AbstractProperty> map = new HashMap<String, AbstractProperty>();
Map<String, XmlrpcProperty> map = new HashMap<String, XmlrpcProperty>();
map.put(findIdKey(), new StringProperty(((Long) button.getData()).toString()));
((DeleteAble) module).deleteRow(map);
loadData();