HSAdmin Backend Domains, E-Mail, Datenbanken
Purodha
2013-03-07 bd2a2f21f9f23ea81f4fca74471e64cd4d33bbc6
Names of domainproperties are pulled from server before used.
HsarwebExeption got subclasses HsarwebUserExeption and
HsarwebInternalException.
4 files modified
2 files added
188 ■■■■ changed files
hsarweb/src/de/hsadmin/web/AbstractModule.java 2 ●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/DomainModule.java 2 ●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/GenericModule.java 38 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/HsarwebInternalException.java 19 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/HsarwebUserException.java 19 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java 108 ●●●●● patch | view | raw | blame | history
hsarweb/src/de/hsadmin/web/AbstractModule.java
@@ -167,7 +167,7 @@
        initLayout();
    }
    
    protected abstract void initModule();
    protected abstract void initModule() throws HsarwebException;
    public MainApplication getApplication() {
        return application;
hsarweb/src/de/hsadmin/web/DomainModule.java
@@ -21,7 +21,7 @@
    private ModuleConfig moduleConfig;
    @Override
    protected void initModule() {
    protected void initModule() throws HsarwebException {
        MainApplication application = getApplication();
        moduleConfig = new ModuleConfig("domain", application.getLocale());
        String login = application.getRunAs();
hsarweb/src/de/hsadmin/web/GenericModule.java
@@ -123,5 +123,43 @@
        }
        return list;
    }
    public Map<String,Map<String,Object>> getModuleProps() {
        Map<String,Map<String,Object>> moduleList = new HashMap<String,Map<String,Object>>();
        Object callSearch = null;
        try {
            callSearch = getApplication().getRemote().callSearch("moduleprop", new HashMap<String, XmlrpcProperty>());
            if (!(callSearch instanceof Object[])) {
                throw new HsarwebException("getModuleProps hat keine Liste bekommen.");
            }
            for (Object row : ((Object[])callSearch)) {
                if (row instanceof Map<?, ?>) {
                    Map<?, ?> rowAsMap = (Map<?, ?>) row;
                    Object moduleName = rowAsMap.get("module");
                    if (moduleName instanceof String) {
                        Object properties = rowAsMap.get("properties");
                        if (properties instanceof Object[]) {
                            Map<String,Object> propertyList = new HashMap<String,Object>();
                            moduleList.put((String) moduleName, propertyList    );
                            for (Object property : (Object[]) properties){
                                if (property instanceof Map<?,?>) {
                                    Object propertyName = ((Map<?, ?>) property).get("property");
                                    if (propertyName instanceof String) {
                                        propertyList.put((String) propertyName, property);
//                                        propertyList.put((String) propertyName, (Map<String,Object>) property);
                                    }
                                }
                            }
                            /* */
                        }
                    }
                }
            }
        } catch (HsarwebException e) {
            e.printStackTrace();
            getApplication().showSystemException(e);
        }
        return moduleList;
    }
    
}
hsarweb/src/de/hsadmin/web/HsarwebInternalException.java
New file
@@ -0,0 +1,19 @@
package de.hsadmin.web;
public class HsarwebInternalException extends HsarwebException {
    private static final long serialVersionUID = 1L;
    public HsarwebInternalException(String string, Throwable e) {
        super(string, e);
    }
    public HsarwebInternalException(Throwable e) {
        super(e);
    }
    public HsarwebInternalException(String string) {
        super(string);
    }
}
hsarweb/src/de/hsadmin/web/HsarwebUserException.java
New file
@@ -0,0 +1,19 @@
package de.hsadmin.web;
public class HsarwebUserException extends HsarwebException {
    private static final long serialVersionUID = 1L;
    public HsarwebUserException(String string, Throwable e) {
        super(string, e);
    }
    public HsarwebUserException(Throwable e) {
        super(e);
    }
    public HsarwebUserException(String string) {
        super(string);
    }
}
hsarweb/src/de/hsadmin/web/vaadin/DomainOptionsPropertyFieldFactory.java
@@ -2,6 +2,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.Component;
@@ -10,7 +11,8 @@
import com.vaadin.ui.Select;
import com.vaadin.ui.VerticalLayout;
import de.hsadmin.web.HsarwebException;
import de.hsadmin.web.DomainModule;
import de.hsadmin.web.HsarwebInternalException;
import de.hsadmin.web.ListOfStringsProperty;
import de.hsadmin.web.Module;
import de.hsadmin.web.XmlrpcProperty;
@@ -20,60 +22,89 @@
/**
 * @author Purodha Blissenbach
 *
 *
 */
public class DomainOptionsPropertyFieldFactory implements PropertyFieldFactory {
    private final Module module;
    private final ModuleConfig config ;
    // TODO: besorge Options und ihre Typen aus der DB
    private static final String[] OPTION_NAMES = new String[] { "backupmxforexternalmx", "greylisting", "htdocsfallback", "includes", "indexes", "multiviews", "php"};
//    private final Map<String,AbstractProperty> optionTypes ; // TODO: auf Vorrat hier
    // TODO: besorge Options  .... Ende
    private final ModuleConfig config;
    private static String[] OPTION_NAMES; // {"backupmxforexternalmx", "php", ...};
    // private final Map<String,AbstractProperty> optionTypes ; // TODO: auf Vorrat hier
    private boolean readOnly = false;
    private boolean writeOnce = false;
    private VerticalLayout layout;
    private final List<SingleDomainOption> optionLayout ;
    private final List<SingleDomainOption> optionLayout;
    public DomainOptionsPropertyFieldFactory(Module module) {
    public DomainOptionsPropertyFieldFactory(Module module) throws HsarwebInternalException {
        this.module = module;
        this.config = module.getModuleConfig();
        optionLayout = new ArrayList<SingleDomainOption>() ;
        this.config = this.module.getModuleConfig();
        // Liste der Namen der Domainoptions besorgen
        DomainModule domainModule = (DomainModule) module;
        Map<String, Map<String, Object>> moduleProps = domainModule.getModuleProps();
        Object p1 = moduleProps.get("domain").get("domainoptions");
        Map<String, Object> p2 = (Map<String, Object>) p1;
        Object p3 = p2.get("selectableValues");
        if (p3 instanceof Map<?, ?>) {
            Map<String, Object> p4 = (Map<String, Object>) p3;
            if (p4.get("kind").equals("DOMAINOPTIONS")) {
                Object p5 = p4.get("values");
                if (p5 instanceof Object[]) {
                    Object[] p6 = (Object[]) p5;
                    OPTION_NAMES = new String[p6.length];
                    int i = 0;
                    for (Object p7 : p6) {
                        if (p7 instanceof Map<?, ?>) {
                            Map<String, ?> p8 = (Map<String, ?>) p7;
                            OPTION_NAMES[i++] = p8.keySet().iterator().next();
                        } else {
                            throw new HsarwebInternalException("p7");
                        }
                    }
                } else {
                    throw new HsarwebInternalException("p5");
                }
            } else {
                throw new HsarwebInternalException("p4");
            }
        } else {
            throw new HsarwebInternalException("p3");
        }
        optionLayout = new ArrayList<SingleDomainOption>();
    }
    private void repaint() {
        layout.removeAllComponents();
        for (int idx=0 ; idx<OPTION_NAMES.length ; ++idx ) {
        for (int idx = 0; idx < OPTION_NAMES.length; ++idx) {
            layout.addComponent(optionLayout.get(idx).getComponent());
        }
    }
    @Override
    public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value) throws HsarwebException {
    public Object createFieldComponent(PropertyConfig prop, XmlrpcProperty value)
            throws HsarwebInternalException {
        layout = new VerticalLayout();
        layout.setCaption(prop.getLabel());
        layout.setData(prop.getId());
        optionLayout.clear();
        if (value instanceof ListOfStringsProperty) {
            ListOfStringsProperty list = (ListOfStringsProperty) value;
            for (int idx=0 ; idx<OPTION_NAMES.length ; ++idx ) {
                optionLayout.add(new SingleDomainOption(this, OPTION_NAMES[idx], list.contains(OPTION_NAMES[idx]) ));
            for (int idx = 0; idx < OPTION_NAMES.length; ++idx) {
                optionLayout.add(new SingleDomainOption(this,
                        OPTION_NAMES[idx], list.contains(OPTION_NAMES[idx])));
            }
        }
        else
        {
        } else {
            // Eine leere Liste von Domainoptionen wird angezeigt werden.
            throw new HsarwebException("Keine Liste: ListOfStringsProperty");
            throw new HsarwebInternalException(
                    "Keine Liste: ListOfStringsProperty");
        }
        repaint();
        return layout;
    }
    @Override
    public XmlrpcProperty getValue(PropertyConfig prop, Object component) throws HsarwebException {
        ListOfStringsProperty setOptions = new ListOfStringsProperty() ;
        for (int idx=0 ; idx<OPTION_NAMES.length ; ++idx ) {
            if(Boolean.TRUE.equals(optionLayout.get(idx).getValue()))
            {
    public XmlrpcProperty getValue(PropertyConfig prop, Object component) {
        ListOfStringsProperty setOptions = new ListOfStringsProperty();
        for (int idx = 0; idx < OPTION_NAMES.length; ++idx) {
            if (Boolean.TRUE.equals(optionLayout.get(idx).getValue())) {
                setOptions.add(OPTION_NAMES[idx]);
            }
        }
@@ -99,22 +130,24 @@
    public boolean isWriteOnce() {
        return writeOnce;
    }
    class SingleDomainOption {
        private final DomainOptionsPropertyFieldFactory owner;
        private final String optionName;
        private HorizontalLayout targetLine;
        private Select select ;
        protected SingleDomainOption(DomainOptionsPropertyFieldFactory owner, String optionName, boolean optionValue) {
        private Select select;
        protected SingleDomainOption(DomainOptionsPropertyFieldFactory owner,
                String optionName, boolean optionValue) {
            this.owner = owner;
            this.optionName = optionName;
            targetLine = new HorizontalLayout();
            targetLine.setWidth(500.0f, Sizeable.UNITS_PIXELS);
            HorizontalLayout leftPart = new HorizontalLayout();
            leftPart.setWidth(220.0f, Sizeable.UNITS_PIXELS);
            Label label = new Label(owner.config.getLabel("domainoption."+optionName),Label.CONTENT_RAW);
            leftPart.addComponent( label); // setCaption(owner.config.getLabel("domainoption."+optionName));
            Label label = new Label(owner.config.getLabel("domainoption."
                    + optionName), Label.CONTENT_RAW);
            leftPart.addComponent(label); // setCaption(owner.config.getLabel("domainoption."+optionName));
            HorizontalLayout rightPart = new HorizontalLayout();
            // ToDO: Fallunterscheidungen nach Optionsart. Z.Z. nur Boolean:
            {
@@ -124,26 +157,25 @@
                this.select.setNewItemsAllowed(false);
                this.select.setNullSelectionAllowed(false);
                this.select.addItem("y");
                this.select.setItemCaption("y" , owner.config.getLabel("yes"));
                this.select.setItemCaption("y", owner.config.getLabel("yes"));
                this.select.addItem("n");
                this.select.setItemCaption("n" , owner.config.getLabel("no"));
                this.select.setItemCaption("n", owner.config.getLabel("no"));
                this.select.setValue(optionValue ? "y" : "n");
                rightPart.addComponent(this.select);
            }
            targetLine.addComponent(leftPart);
            targetLine.addComponent(rightPart);
        }
        public Component getComponent() {
            return targetLine;
        }
        public Boolean getValue() {
            Boolean value = null;
            String val = (String) this.select.getValue();
            if( val.equals("y") || val.equals("n") )
            {
                    value = (val.equals("y"));
            if (val.equals("y") || val.equals("n")) {
                value = (val.equals("y"));
            }
            return value;
        }