implement compatible property module

This commit is contained in:
Peter Hormanns 2015-09-07 16:29:30 +02:00
parent b58321b42a
commit 5de9e7eceb
2 changed files with 106 additions and 1 deletions

View File

@ -0,0 +1,104 @@
package de.hsadmin.remote;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.core.model.AnnFieldIO;
import de.hsadmin.core.model.AuthenticationException;
import de.hsadmin.core.model.HSAdminException;
import de.hsadmin.core.model.ReadWriteAccess;
import de.hsadmin.core.model.Transaction;
public class PropertyRemote implements IRemote {
@Override
public List<Map<String, Object>> search(String runAsUser, String ticket,
Map<String, String> whereParams) throws HSAdminException {
String user = runAsUser;
List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
Transaction transaction = new Transaction(user);
try {
if (transaction.login(user, ticket)) {
InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("org/apache/xmlrpc/webserver/XmlRpcServlet.properties");
Properties properties = new Properties();
properties.load(resourceAsStream);
for (Object moduleKey : properties.keySet()) {
Class<?> remoteClass = Class.forName(properties.getProperty((String) moduleKey));
Object newInstance = remoteClass.newInstance();
if (newInstance instanceof AbstractRemote) {
AbstractRemote remote = (AbstractRemote) newInstance;
Class<? extends AbstractEntity> entityClass = remote.getEntityClass();
for (Field f: entityClass.getDeclaredFields()) {
AnnFieldIO fieldIO = f.getAnnotation(AnnFieldIO.class);
if (fieldIO != null) {
HashMap<String, Object> propertyProperties = new HashMap<String, Object>();
String fieldName = f.getName();
propertyProperties.put("module", (String) moduleKey);
propertyProperties.put("name", fieldName);
propertyProperties.put("searchable", "equals");
propertyProperties.put("readwriteable", "read");
ReadWriteAccess rw = fieldIO.rw();
if (ReadWriteAccess.READONLY.equals(rw)) {
propertyProperties.put("readwriteable", "read");
}
if (ReadWriteAccess.READWRITE.equals(rw)) {
propertyProperties.put("readwriteable", "readwrite");
}
if (ReadWriteAccess.WRITEONCE.equals(rw)) {
propertyProperties.put("readwriteable", "writeonce");
}
if (ReadWriteAccess.WRITEONLY.equals(rw)) {
propertyProperties.put("readwriteable", "none");
}
propertyProperties.put("type", "string");
propertyProperties.put("displaySequence", "2");
if ("name".equals(fieldName)) {
propertyProperties.put("displaySequence", "1");
}
propertyProperties.put("displayVisible", "always");
propertyProperties.put("minLength", "0");
propertyProperties.put("maxLength", "999");
String regExp = fieldIO.validation();
propertyProperties.put("validationRegexp", regExp);
result.add(propertyProperties);
}
}
}
}
return result;
} else {
throw new AuthenticationException("authentication failed");
}
} catch (Exception e) {
throw new HSAdminException(e);
} finally {
transaction.close();
}
}
@Override
public Map<String, Object> add(String runAsUser, String ticket,
Map<String, Object> setParams) throws HSAdminException {
throw new HSAdminException("read only module");
}
@Override
public void delete(String runAsUser, String ticket,
Map<String, String> whereParams) throws HSAdminException {
throw new HSAdminException("read only module");
}
@Override
public List<Map<String, Object>> update(String runAsUser, String ticket,
Map<String, Object> setParams, Map<String, String> whereParams)
throws HSAdminException {
throw new HSAdminException("read only module");
}
}

View File

@ -9,4 +9,5 @@ mysqluser=de.hsadmin.remote.MysqlUserRemote
postgresqluser=de.hsadmin.remote.PgsqlUserRemote
mysqldb=de.hsadmin.remote.MysqlDbRemote
postgresqldb=de.hsadmin.remote.PgsqlDbRemote
moduleprop=de.hsadmin.remote.ModulePropertiesRemote
moduleprop=de.hsadmin.remote.ModulePropertiesRemote
property=de.hsadmin.remote.PropertyRemote