Changeset 307

Show
Ignore:
Timestamp:
03/28/06 13:37:45
Author:
douglm
Message:

Make config application mostly work. Still more to be done but much closer.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/calendar3/calEnv/src/org/bedework/calenv/CalEnv.java

    r300 r307  
    140140   * @throws CalEnvException 
    141141   */ 
    142   public Properties getProperties() throws CalEnvException { 
     142  public static Properties getProperties() throws CalEnvException { 
    143143    return getPr(); 
    144144  } 
  • trunk/calendar3/config/src/org/bedework/webconfig/AbstractAction.java

    r302 r307  
    6464import org.bedework.webconfig.collections.Globals; 
    6565import org.bedework.webconfig.collections.Modules; 
     66import org.bedework.webconfig.collections.Syspars; 
    6667import org.bedework.webconfig.collections.Webadmin; 
    6768import org.bedework.webconfig.collections.Webconfig; 
     
    8586import org.apache.struts.util.MessageResources; 
    8687 
    87 /** There are 3 opeations for this simple client <ul> 
     88/** There are 3 operations for this simple client <ul> 
    8889 * <li>load properties</li> 
    8990 * <li>refresh</li> 
     
    114115    } 
    115116 
    116     if (form.getPropertyCollections().size() == 0) { 
    117       // Load the default properties 
    118       Properties pr = Util.getPropertiesFromResource(defaultProperties); 
    119       resetProperties(pr, form); 
    120     } 
    121  
    122117    return forward; 
    123118  } 
     
    161156      BwWebUtil.setState(request, s); 
    162157    } 
    163   } 
    164  
    165   protected void resetProperties(Properties pr, 
    166                                  ActionForm form) throws Throwable { 
     158     
     159    boolean changed = false; 
     160     
     161    if (form.getPropertyCollections().size() == 0) { 
     162      changed = true; 
     163    } else { 
     164      changed = modulesChanged(form); 
     165    } 
     166     
     167    if (changed) { 
     168      resetProperties(form); 
     169    } 
     170  } 
     171 
     172  protected void resetProperties(ActionForm form) throws Throwable { 
    167173    form.setPropertyCollections(null); // reinit 
    168174 
    169175    ConfigCollection modules = new Modules(); 
    170176    form.addPropertyCollection(modules); 
    171     form.addPropertyCollection(new Globals()); 
     177     
     178    ConfigCollection globals = new Globals(); 
     179    form.addPropertyCollection(globals); 
     180     
     181    ConfigCollection syspars = new Syspars(); 
     182    form.addPropertyCollection(syspars); 
     183 
     184    Properties pr = form.getProperties(); 
     185     
     186    /* Initialise those two as they may affect the rest. */ 
     187    if (pr != null) { 
     188      modules.initialise(pr, form.getErr()); 
     189      globals.initialise(pr, form.getErr()); 
     190      syspars.initialise(pr, form.getErr()); 
     191    } 
    172192     
    173193    /* Ensure module names and types same size */ 
     
    226246  } 
    227247 
    228   protected boolean saveProperties(Properties pr, 
    229                                    ActionForm form) throws Throwable { 
     248  protected ConfigCollection findCollection(String name,  
     249                                            ActionForm form) throws Throwable { 
     250    Collection c = form.getPropertyCollections(); 
     251 
     252    Iterator it = c.iterator(); 
     253 
     254    while (it.hasNext()) { 
     255      ConfigCollection coll = (ConfigCollection)it.next(); 
     256 
     257      if (name.equals(coll.getName())) { 
     258        return coll; 
     259      } 
     260    } 
     261 
     262    return null; 
     263  } 
     264 
     265  protected boolean modulesChanged(ActionForm form) throws Throwable { 
     266    ConfigCollection modules = findCollection(modulesCollectionName, form); 
     267     
     268    if (modules == null) { 
     269      return false; 
     270    } 
     271     
     272    OrderedListProperty moduleNames =  
     273      (OrderedListProperty)modules.findProperty("app.names"); 
     274     
     275    OrderedMultiListProperty moduleTypes =  
     276      (OrderedMultiListProperty)modules.findProperty("app.types"); 
     277 
     278    boolean changed = moduleNames.getChanged() || moduleTypes.getChanged(); 
     279     
     280    moduleNames.resetChanged(); 
     281    moduleTypes.resetChanged(); 
     282     
     283    return changed; 
     284  } 
     285 
     286  protected boolean saveProperties(ActionForm form) throws Throwable { 
    230287    Collection c = form.getPropertyCollections(); 
    231288 
    232289    Iterator it = c.iterator(); 
    233290    boolean ok = true; 
     291    Properties pr = new Properties(); 
     292    form.setProperties(pr); 
    234293 
    235294    while (it.hasNext()) { 
  • trunk/calendar3/config/src/org/bedework/webconfig/ActionForm.java

    r2 r307  
    136136   */ 
    137137  public Properties getProperties() { 
    138    return properties; 
     138    if (properties == null) { 
     139      try { 
     140        properties = (Properties)CalEnv.getProperties().clone(); 
     141      } catch (Throwable t) { 
     142        getErr().emit(t); 
     143      } 
     144    } 
     145    return properties; 
    139146  } 
    140147 
  • trunk/calendar3/config/src/org/bedework/webconfig/Defs.java

    r302 r307  
    8080  }; 
    8181   
     82  /** */ 
     83  public static final String modulesCollectionName = "modules"; 
     84   
    8285  /** Default properties file (built in to application) */ 
    83   public final static String defaultProperties = "/properties/calendar/default-bedework.properties";  
     86  //public final static String defaultProperties = "/properties/calendar/default-bedework.properties";  
    8487   
    8588  /* Types for properties */ 
  • trunk/calendar3/config/src/org/bedework/webconfig/LoadAction.java

    r2 r307  
    8989    InputStream is = upFile.getInputStream(); 
    9090    Properties pr = new Properties(); 
     91    form.setProperties(pr); 
    9192     
    9293    try { 
     
    9798    } 
    9899     
    99     resetProperties(pr, form); 
     100    resetProperties(form); 
    100101 
    101102    return "success"; 
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Caldavpersonal.java

    r302 r307  
    7474    requiredText("deploy.dir", "deploy.dir"); 
    7575 
    76     requiredText("security.domain", "app.security.domain"); 
     76    requiredText("security.domain", "security.domain"); 
    7777 
    78     requiredText("security.prefix", "app.security.prefix"); 
     78    requiredText("security.prefix", "security.prefix"); 
    7979 
    80     requiredText("transport.guarantee", "app.transport.guarantee"); 
     80    requiredText("transport.guarantee", "transport.guarantee"); 
    8181 
    8282    // We really want this to set the value of the above to NONE or CONFIDENTIAL 
    8383    //addProperty(new BooleanProperty("ssl", "use.ssl", true)); 
    8484 
    85     requiredText("description", "app.description"); 
     85    requiredText("description", "description"); 
    8686 
    87     requiredText("display.name", "app.display.name"); 
     87    requiredText("display.name", "display.name"); 
    8888 
    89     requiredText("name", "app.name"); 
     89    requiredText("name", "name"); 
     90 
     91    hiddenBoolean("guestmode", "guestmode"); 
     92 
     93    hiddenBoolean("publicadmin", "publicadmin"); 
     94 
     95    requiredText("logprefix", "logprefix"); 
    9096  } 
    9197} 
    92  
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Caldavpublic.java

    r302 r307  
    7474    requiredText("deploy.dir", "deploy.dir"); 
    7575 
    76     requiredText("description", "app.description"); 
     76    requiredText("description", "description"); 
    7777 
    78     requiredText("display.name", "app.display.name"); 
     78    requiredText("display.name", "display.name"); 
    7979 
    80     requiredText("name", "app.name"); 
     80    requiredText("name", "name"); 
     81 
     82    hiddenBoolean("guestmode", "guestmode"); 
     83 
     84    hiddenBoolean("publicadmin", "publicadmin"); 
     85 
     86    requiredText("logprefix", "logprefix"); 
     87 
     88    requiredText("run.as.user", "run.as.user"); 
    8189  } 
    8290} 
    83  
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/ConfigCollection.java

    r302 r307  
    180180  } 
    181181   
     182  /** Add a hidden boolean property to the collection 
     183   * 
     184   * @param name 
     185   * @param suffix 
     186   * @return  BooleanProperty 
     187   * @throws Throwable 
     188   */ 
     189  public BooleanProperty hiddenBoolean(String name, String suffix) throws Throwable { 
     190    BooleanProperty prop = new BooleanProperty(name, suffix, true); 
     191    prop.setHidden(true); 
     192    addProperty(prop); 
     193     
     194    return prop; 
     195  } 
     196   
    182197  /** Add an optional boolean property to the collection 
    183198   * 
     
    217232  public ConfigProperty requiredText(String name, String suffix) throws Throwable { 
    218233    ConfigProperty prop = new ConfigProperty(name, suffix, true); 
     234    addProperty(prop); 
     235     
     236    return prop; 
     237  } 
     238   
     239  /** Add a hidden text property to the collection 
     240   * 
     241   * @param name 
     242   * @param suffix 
     243   * @return  ConfigProperty 
     244   * @throws Throwable 
     245   */ 
     246  public ConfigProperty hiddenText(String name, String suffix) throws Throwable { 
     247    ConfigProperty prop = new ConfigProperty(name, suffix, true); 
     248    prop.setHidden(true); 
    219249    addProperty(prop); 
    220250     
     
    407437    return goodValues; 
    408438  } 
     439 
     440  /* ==================================================================== 
     441   *                   Object methods 
     442   * ==================================================================== */ 
     443 
     444  public int compareTo(Object o) { 
     445    if (!(o instanceof ConfigCollection)) { 
     446      return -1; 
     447    } 
     448 
     449    if (this == o) { 
     450      return 0; 
     451    } 
     452 
     453    ConfigCollection that = (ConfigCollection)o; 
     454 
     455    return getName().compareTo(that.getName()); 
     456  } 
     457 
     458  /* We always use the compareTo method 
     459   */ 
     460  public boolean equals(Object obj) { 
     461    if (this == obj) { 
     462      return true; 
     463    } 
     464 
     465    return compareTo(obj) == 0; 
     466  } 
     467 
     468  public int hashCode() { 
     469    int hc = 1; 
     470 
     471    if (getName() != null) { 
     472      hc *= getName().hashCode(); 
     473    } 
     474 
     475    return hc; 
     476  } 
     477 
     478  public String toString() { 
     479    StringBuffer sb = new StringBuffer("ConfigCollection{"); 
     480 
     481    sb.append("name="); 
     482    sb.append(getName()); 
     483    sb.append("}"); 
     484 
     485    return sb.toString(); 
     486  } 
    409487} 
    410488 
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Modules.java

    r302 r307  
    6565   */ 
    6666  public Modules() throws Throwable { 
    67     super("modules", "install"); 
     67    super(modulesCollectionName, "install"); 
    6868 
    6969    requiredOrderedList("app.names", "app.names"); 
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Syspars.java

    r302 r307  
    7575    requiredText("user.calroot", "user.calroot"); 
    7676 
    77     requiredText("default.user.calendar", 
    78                                    "default.user.calendar"); 
     77    requiredText("default.user.calendar", "default.user.calendar"); 
    7978 
    80     requiredText("default.trash.calendar", 
    81                                    "default.trash.calendar"); 
     79    requiredText("default.trash.calendar", "default.trash.calendar"); 
    8280 
    83     requiredText("default.user.inbox", 
    84                                    "default.user.inbox"); 
     81    requiredText("default.user.inbox", "default.user.inbox"); 
    8582 
    86     requiredText("default.user.outbox", 
    87                                    "default.user.outbox"); 
     83    requiredText("default.user.outbox", "default.user.outbox"); 
    8884 
    89     requiredText("default.user.view", 
    90                                    "default.user.view"); 
     85    requiredText("default.user.view", "default.user.view"); 
    9186 
    9287    requiredText("public.user", "public.user"); 
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Webadmin.java

    r302 r307  
    6868    super(name, "app." + name); 
    6969 
    70     requiredText("defaultContentType", "app.default.contenttype"); 
     70    requiredText("defaultContentType", "default.contenttype"); 
    7171 
    7272    requiredText("war", "war.name"); 
     
    7474    requiredText("context.root", "context.root"); 
    7575 
    76     requiredText("app.root", "app.root"); 
     76    requiredText("app.root", "root"); 
    7777 
    78     requiredText("resources.dir", "app.resources.dir"); 
     78    //requiredText("resources.dir", "app.resources.dir"); 
    7979 
    8080    requiredText("deploy.dir", "deploy.dir"); 
    8181 
    82     requiredText("security.domain", "app.security.domain"); 
     82    requiredText("security.domain", "security.domain"); 
    8383 
    84     requiredText("security.prefix", "app.security.prefix"); 
     84    requiredText("security.prefix", "security.prefix"); 
    8585 
    86     requiredText("transport.guarantee", "app.transport.guarantee"); 
     86    requiredText("transport.guarantee", "transport.guarantee"); 
    8787 
    8888    // We really want this to set the value of the above to NONE or CONFIDENTIAL 
    8989    //addProperty(new BooleanProperty("ssl", "use.ssl", true)); 
    9090 
    91     requiredText("description", "app.description"); 
     91    requiredText("description", "description"); 
    9292 
    93     requiredText("display.name", "app.display.name"); 
     93    requiredText("display.name", "display.name"); 
    9494 
    95     requiredText("name", "app.name"); 
     95    requiredText("name", "name"); 
    9696 
    97     requiredBoolean("noGroupAllowed", "app.nogroupallowed"); 
     97    requiredBoolean("noGroupAllowed", "nogroupallowed"); 
    9898 
    99     requiredBoolean("autocreatesponsors", "app.autocreatesponsors"); 
     99    requiredBoolean("autocreatesponsors", "autocreatesponsors"); 
    100100 
    101     requiredBoolean("autodeletesponsors", "app.autodeletesponsors"); 
     101    requiredBoolean("autodeletesponsors", "autodeletesponsors"); 
    102102 
    103     requiredBoolean("autocreatelocations", "app.autocreatelocations"); 
     103    requiredBoolean("autocreatelocations", "autocreatelocations"); 
    104104 
    105     requiredBoolean("autodeletelocations", "app.autodeletelocations"); 
     105    requiredBoolean("autodeletelocations", "autodeletelocations"); 
    106106 
    107     requiredBoolean("allowEditAllCategories", "app.allowEditAllCategories"); 
     107    requiredBoolean("allowEditAllCategories", "allowEditAllCategories"); 
    108108 
    109     requiredBoolean("allowEditAllLocations", "app.allowEditAllLocations"); 
     109    requiredBoolean("allowEditAllLocations", "allowEditAllLocations"); 
    110110 
    111     requiredBoolean("allowEditAllSponsors", "app.allowEditAllSponsors"); 
     111    requiredBoolean("allowEditAllSponsors", "allowEditAllSponsors"); 
    112112 
    113     requiredBoolean("categoryOptional", "app.categoryOptional"); 
     113    requiredBoolean("categoryOptional", "categoryOptional"); 
    114114 
    115     requiredBoolean("hour24", "app.hour24"); 
     115    requiredBoolean("hour24", "hour24"); 
    116116 
    117     requiredInt("minincrement", "app.minincrement"); 
     117    requiredInt("minincrement", "minincrement"); 
    118118 
    119     requiredText("admingroupsidprefix", "app.admingroupsidprefix"); 
     119    requiredText("admingroupsidprefix", "admingroupsidprefix"); 
     120 
     121    hiddenBoolean("guestmode", "guestmode"); 
     122 
     123    hiddenBoolean("publicadmin", "publicadmin"); 
     124 
     125    requiredText("logprefix", "logprefix"); 
     126 
     127    requiredText("run.as.user", "run.as.user"); 
    120128  } 
    121129} 
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Webconfig.java

    r302 r307  
    6767    super(name, "app." + name, false); 
    6868 
    69     requiredText("defaultContentType", "app.default.contenttype"); 
     69    requiredText("defaultContentType", "default.contenttype"); 
    7070 
    7171    requiredText("war", "war.name"); 
     
    7373    requiredText("context.root", "context.root"); 
    7474 
    75     requiredText("app.root", "app.root"); 
     75    requiredText("app.root", "root"); 
    7676 
    77     requiredText("resources.dir", "app.resources.dir"); 
     77    //requiredText("resources.dir", "app.resources.dir"); 
    7878 
    7979    requiredText("deploy.dir", "deploy.dir"); 
    8080 
    81     requiredText("envprefix", "env.prefix"); 
     81    requiredText("description", "description"); 
    8282 
    83     requiredText("description", "app.description"); 
     83    requiredText("display.name", "display.name"); 
    8484 
    85     requiredText("display.name", "app.display.name"); 
     85    requiredText("name", "name"); 
    8686 
    87     requiredText("name", "app.name"); 
     87    hiddenBoolean("guestmode", "guestmode"); 
     88 
     89    hiddenBoolean("publicadmin", "publicadmin"); 
     90 
     91    requiredText("logprefix", "logprefix"); 
    8892  } 
    8993} 
    90  
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Webpersonal.java

    r302 r307  
    6868    super(name, "app." + name); 
    6969 
    70     requiredText("defaultContentType", "app.default.contenttype"); 
     70    requiredText("defaultContentType", "default.contenttype"); 
    7171 
    7272    requiredText("war", "war.name"); 
     
    7474    requiredText("context.root", "context.root"); 
    7575 
    76     requiredText("app.root", "app.root"); 
     76    requiredText("app.root", "root"); 
    7777 
    78     requiredText("resources.dir", "app.resources.dir"); 
     78    //requiredText("resources.dir", "app.resources.dir"); 
    7979 
    8080    requiredText("deploy.dir", "deploy.dir"); 
    8181 
    82     requiredText("web.xml", "app.web.xml"); 
     82    requiredText("web.xml", "web.xml"); 
    8383 
    84     requiredText("security.domain", "app.security.domain"); 
     84    requiredText("security.domain", "security.domain"); 
    8585 
    86     requiredText("security.prefix", "app.security.prefix"); 
     86    requiredText("security.prefix", "security.prefix"); 
    8787 
    88     requiredText("transport.guarantee", "app.transport.guarantee"); 
     88    requiredText("transport.guarantee", "transport.guarantee"); 
    8989 
    9090    // We really want this to set the value of the above to NONE or CONFIDENTIAL 
    9191    //addProperty(new BooleanProperty("ssl", "use.ssl"); 
    9292 
    93     requiredText("description", "app.description"); 
     93    requiredText("description", "description"); 
    9494 
    95     requiredText("display.name", "app.display.name"); 
     95    requiredText("display.name", "display.name"); 
    9696 
    97     requiredText("name", "app.name"); 
     97    requiredText("name", "name"); 
    9898 
    99     requiredBoolean("hour24", "app.hour24"); 
     99    requiredBoolean("hour24", "hour24"); 
    100100 
    101     requiredInt("minincrement", "app.minincrement"); 
     101    requiredInt("minincrement", "minincrement"); 
    102102 
    103     requiredText("skinset.name", "app.skinset.name"); 
     103    requiredText("skinset.name", "skinset.name"); 
    104104 
    105     requiredBoolean("showyeardata", "app.showyeardata"); 
     105    requiredBoolean("showyeardata", "showyeardata"); 
    106106 
    107     requiredText("default.view", "app.default.view"); 
     107    requiredText("default.view", "default.view"); 
    108108 
    109     requiredInt("refresh.interval", "app.refresh.interval"); 
     109    requiredInt("refresh.interval", "refresh.interval"); 
    110110 
    111     requiredText("refresh.action", "app.refresh.action"); 
     111    requiredText("refresh.action", "refresh.action"); 
     112 
     113    hiddenBoolean("guestmode", "guestmode"); 
     114 
     115    hiddenBoolean("publicadmin", "publicadmin"); 
     116 
     117    requiredText("logprefix", "logprefix"); 
    112118  } 
    113119} 
  • trunk/calendar3/config/src/org/bedework/webconfig/collections/Webpublic.java

    r302 r307  
    6868    super(name, "app." + name); 
    6969 
    70     requiredText("defaultContentType", "app.default.contenttype"); 
     70    requiredText("defaultContentType", "default.contenttype"); 
    7171 
    7272    requiredText("war", "war.name"); 
     
    7474    requiredText("context.root", "context.root"); 
    7575 
    76     requiredText("app.root", "app.root"); 
     76    requiredText("app.root", "root"); 
    7777 
    78     requiredText("resources.dir", "app.resources.dir"); 
     78    //requiredText("resources.dir", "app.resources.dir"); 
    7979 
    8080    requiredText("deploy.dir", "deploy.dir"); 
    8181 
    82     requiredText("web.xml", "app.web.xml"); 
     82    requiredText("web.xml", "web.xml"); 
    8383 
    84     requiredText("description", "app.description"); 
     84    requiredText("description", "description"); 
    8585 
    86     requiredText("display.name", "app.display.name"); 
     86    requiredText("display.name", "display.name"); 
    8787 
    88     requiredText("name", "app.name"); 
     88    requiredText("name", "name"); 
     89 
     90    requiredBoolean("hour24", "hour24"); 
     91 
     92    requiredInt("minincrement", "minincrement"); 
     93 
     94    requiredText("skinset.name", "skinset.name"); 
     95 
     96    requiredBoolean("showyeardata", "showyeardata"); 
     97 
     98    requiredText("default.view", "default.view"); 
     99 
     100    requiredInt("refresh.interval", "refresh.interval"); 
     101 
     102    requiredText("refresh.action", "refresh.action"); 
     103 
     104    hiddenBoolean("guestmode", "guestmode"); 
     105 
     106    hiddenBoolean("publicadmin", "publicadmin"); 
     107 
     108    requiredText("logprefix", "logprefix"); 
    89109 
    90110    requiredText("run-as", "run.as.user"); 
    91  
    92     requiredBoolean("hour24", "app.hour24"); 
    93  
    94     requiredInt("minincrement", "app.minincrement"); 
    95  
    96     requiredText("skinset.name", "app.skinset.name"); 
    97  
    98     requiredBoolean("showyeardata", "app.showyeardata"); 
    99  
    100     requiredText("default.view", "app.default.view"); 
    101  
    102     requiredInt("refresh.interval", "app.refresh.interval"); 
    103  
    104     requiredText("refresh.action", "app.refresh.action"); 
    105111  } 
    106112} 
  • trunk/calendar3/config/src/org/bedework/webconfig/props/ConfigProperty.java

    r2 r307  
    7979  private String suffix; 
    8080  private boolean required; 
     81  private boolean changed; 
     82  private boolean hidden;   // A hidden - constant - property 
    8183  private BooleanProperty onlyIf; 
     84   
    8285  private boolean advanced; 
    8386 
     
    158161   */ 
    159162  public void setValue(String val) { 
     163    changed = true; 
    160164    value = val; 
    161165  } 
     
    185189  } 
    186190 
     191  /** Get the changed flag 
     192   * 
     193   * @return boolean changed 
     194   */ 
     195  public boolean getChanged() { 
     196    return changed; 
     197  } 
     198 
     199  /** Reset the changed flag 
     200   */ 
     201  public void resetChanged() { 
     202    changed = false; 
     203  } 
     204 
    187205  /** Get the show flag 
    188206   * 
     
    190208   */ 
    191209  public boolean getShow() { 
     210    if (hidden) { 
     211      return false; 
     212    } 
     213     
    192214    if (onlyIf != null) { 
    193215      return onlyIf.getBooleanVal(); 
    194216    } 
     217     
    195218    return true; 
    196219  } 
     
    210233  public boolean getGoodValue() { 
    211234    return goodValue; 
     235  } 
     236 
     237  /** Set the hidden flag 
     238   * 
     239   * @param val    boolean 
     240   */ 
     241  public void setHidden(boolean val) { 
     242    hidden = val; 
     243  } 
     244 
     245  /** Return the state of the hidden flag 
     246   * 
     247   * @return boolean true for hidden 
     248   */ 
     249  public boolean getHidden() { 
     250    return hidden; 
    212251  } 
    213252