Files
venice-main-classic/src/com/silverwrist/venice/servlets/format/EditSIGProfileDialog.java
2001-01-31 20:55:37 +00:00

271 lines
11 KiB
Java

/*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The Original Code is the Venice Web Communities System.
*
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
*
* Contributor(s):
*/
package com.silverwrist.venice.servlets.format;
import java.util.*;
import com.silverwrist.util.StringUtil;
import com.silverwrist.venice.ValidationException;
import com.silverwrist.venice.security.Role;
import com.silverwrist.venice.core.*;
public class EditSIGProfileDialog extends ContentDialog
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private VeniceEngine engine;
private int sigid;
/*--------------------------------------------------------------------------------
* Constructors
*--------------------------------------------------------------------------------
*/
public EditSIGProfileDialog(List country_list, List language_list)
{
super("Edit SIG Profile:",null,"sigprofform","sigadmin");
setHiddenField("cmd","P");
setHiddenField("sig","");
Vector vec_pubpriv = new Vector(2);
vec_pubpriv.add("0|Public");
vec_pubpriv.add("1|Private");
vec_pubpriv.trimToSize();
Vector vec_hidemode = new Vector(3);
vec_hidemode.add(String.valueOf(SIGContext.HIDE_NONE) + "|Show in both directory and search");
vec_hidemode.add(String.valueOf(SIGContext.HIDE_DIRECTORY) + "|Hide in directory, but not in search");
vec_hidemode.add(String.valueOf(SIGContext.HIDE_BOTH) + "|Hide in both directory and search");
vec_hidemode.trimToSize();
addFormField(new CDFormCategoryHeader("Basic Information"));
addFormField(new CDTextFormField("name","SIG Name",null,true,32,128));
addFormField(new CDVeniceIDFormField("alias","SIG Alias",null,true,32,32));
addFormField(new CDTextFormField("synopsis","Synopsis",null,false,32,255));
addFormField(new CDTextFormField("rules","Rules",null,false,32,255));
addFormField(new CDLanguageListFormField("language","Primary language",null,true,language_list));
addFormField(new CDTextFormField("url","Home page",null,false,32,255));
addFormField(new CDFormCategoryHeader("Location"));
addFormField(new CDTextFormField("company","Company",null,false,32,255));
addFormField(new CDTextFormField("addr1","Address",null,false,32,255));
addFormField(new CDTextFormField("addr2","Address","(line 2)",false,32,255));
addFormField(new CDTextFormField("loc","City",null,false,32,64));
addFormField(new CDTextFormField("reg","State/Province",null,false,32,64));
addFormField(new CDTextFormField("pcode","Zip/Postal Code",null,true,32,64));
addFormField(new CDCountryListFormField("country","Country",null,true,country_list));
addFormField(new CDFormCategoryHeader("Security"));
addFormField(new CDSimplePickListFormField("comtype","SIG type",null,true,vec_pubpriv,'|'));
addFormField(new CDTextFormField("joinkey","Join key","(for private SIGs)",false,32,64));
addFormField(new CDCheckBoxFormField("membersonly","Allow only members to access this SIG",null,"Y"));
addFormField(new CDSimplePickListFormField("hidemode","SIG visibility",null,true,vec_hidemode,'|'));
addFormField(new CDRoleListFormField("read_lvl","Security level required to read contents",null,true,
Role.getSIGReadList()));
addFormField(new CDRoleListFormField("write_lvl","Security level required to update profile",null,true,
Role.getSIGWriteList()));
addFormField(new CDRoleListFormField("create_lvl","Security level required to create new subobjects",
null,true,Role.getSIGCreateList()));
addFormField(new CDRoleListFormField("delete_lvl","Security level required to delete SIG",null,true,
Role.getSIGDeleteList()));
addFormField(new CDRoleListFormField("join_lvl","Security level required to join SIG",null,true,
Role.getSIGJoinList()));
// TODO: add logo selection/uploading method here
addCommandButton(new CDImageButton("update","bn_update.gif","Update",80,24));
addCommandButton(new CDImageButton("cancel","bn_cancel.gif","Cancel",80,24));
} // end EditSIGProfileDialog
protected EditSIGProfileDialog(EditSIGProfileDialog other)
{
super(other);
} // end constructor
/*--------------------------------------------------------------------------------
* Internal functions
*--------------------------------------------------------------------------------
*/
private void doDisable(SIGContext sig)
{
if (sig.isAdminSIG())
{ // make sure certain fields are disabled for admin SIGs
setFieldEnabled("comtype",false);
setFieldEnabled("joinkey",false);
setFieldEnabled("membersonly",false);
setFieldEnabled("hidemode",false);
setFieldEnabled("read_lvl",false);
setFieldEnabled("write_lvl",false);
setFieldEnabled("create_lvl",false);
setFieldEnabled("delete_lvl",false);
setFieldEnabled("join_lvl",false);
} // end if
} // end doDisable
/*--------------------------------------------------------------------------------
* Overrides from class ContentDialog
*--------------------------------------------------------------------------------
*/
protected void validateWholeForm() throws ValidationException
{
if (engine.aliasExists(getFieldValue("alias"),sigid))
throw new ValidationException("That alias is already used by another SIG on the system.");
if (getFieldValue("comtype").equals("1"))
{ // make sure if they flagged it as Private that they specified a join key
if (StringUtil.isStringEmpty(getFieldValue("joinkey")))
throw new ValidationException("Private SIGs must specify a join key value.");
} // end if
} // end validateWholeForm
/*--------------------------------------------------------------------------------
* External operations
*--------------------------------------------------------------------------------
*/
public void setupDialogBasic(VeniceEngine engine, SIGContext sig)
{
this.engine = engine;
this.sigid = sig.getSIGID();
} // end setupDialogBasic
public void setupDialog(VeniceEngine engine, SIGContext sig) throws DataException, AccessError
{
setupDialogBasic(engine,sig);
ContactInfo ci = sig.getContactInfo();
setHiddenField("sig",String.valueOf(sig.getSIGID()));
setFieldValue("name",sig.getName());
setFieldValue("alias",sig.getAlias());
setFieldValue("synopsis",sig.getSynopsis());
setFieldValue("rules",sig.getRules());
setFieldValue("language",sig.getLanguageCode());
setFieldValue("url",ci.getURL());
setFieldValue("company",ci.getCompany());
setFieldValue("addr1",ci.getAddressLine1());
setFieldValue("addr2",ci.getAddressLine2());
setFieldValue("loc",ci.getLocality());
setFieldValue("reg",ci.getRegion());
setFieldValue("pcode",ci.getPostalCode());
setFieldValue("country",ci.getCountry());
if (sig.isPublicSIG())
{ // public SIG - no join key
setFieldValue("comtype","0");
setFieldValue("joinkey","");
} // end if
else
{ // private SIG - display the join key
setFieldValue("comtype","1");
setFieldValue("joinkey",sig.getJoinKey());
} // end else
if (sig.getMembersOnly())
setFieldValue("membersonly","Y");
setFieldValue("hidemode",String.valueOf(sig.getHideMode()));
setFieldValue("read_lvl",String.valueOf(sig.getReadLevel()));
setFieldValue("write_lvl",String.valueOf(sig.getWriteLevel()));
setFieldValue("create_lvl",String.valueOf(sig.getCreateLevel()));
setFieldValue("delete_lvl",String.valueOf(sig.getDeleteLevel()));
setFieldValue("join_lvl",String.valueOf(sig.getJoinLevel()));
doDisable(sig);
} // end setupDialog
public void doDialog(SIGContext sig) throws ValidationException, DataException, AccessError
{
final String yes = "Y"; // the "yes" string
validate(); // validate the dialog entries
int hidemode, read_lvl, write_lvl, create_lvl, delete_lvl, join_lvl;
try
{ // convert the values of some dropdowns to real numbers
hidemode = Integer.parseInt(getFieldValue("hidemode"));
read_lvl = Integer.parseInt(getFieldValue("read_lvl"));
write_lvl = Integer.parseInt(getFieldValue("write_lvl"));
create_lvl = Integer.parseInt(getFieldValue("create_lvl"));
delete_lvl = Integer.parseInt(getFieldValue("delete_lvl"));
join_lvl = Integer.parseInt(getFieldValue("join_lvl"));
} // end try
catch (NumberFormatException nfe)
{ // how rude!
throw new InternalStateError("somehow we got a non-numeric result from a numeric dropdown list!");
} // end catch
// save off the ContactInfo-related fields first
ContactInfo ci = sig.getContactInfo();
ci.setURL(getFieldValue("url"));
ci.setCompany(getFieldValue("company"));
ci.setAddressLine1(getFieldValue("addr1"));
ci.setAddressLine2(getFieldValue("addr2"));
ci.setLocality(getFieldValue("loc"));
ci.setRegion(getFieldValue("reg"));
ci.setPostalCode(getFieldValue("pcode"));
ci.setCountry(getFieldValue("country"));
sig.putContactInfo(ci);
// now save the big text fields
sig.setName(getFieldValue("name"));
sig.setAlias(getFieldValue("alias"));
sig.setSynopsis(getFieldValue("synopsis"));
sig.setRules(getFieldValue("rules"));
sig.setLanguage(getFieldValue("language"));
if (!(sig.isAdminSIG()))
{ // save off the security information
String jkey;
if (getFieldValue("comtype").equals("1"))
jkey = getFieldValue("joinkey");
else
jkey = null;
sig.setJoinKey(jkey);
sig.setMembersOnly(yes.equals(getFieldValue("membersonly")));
sig.setHideMode(hidemode);
sig.setSecurityLevels(read_lvl,write_lvl,create_lvl,delete_lvl,join_lvl);
} // end if
} // end doDialog
public void resetOnError(SIGContext sig, String message)
{
setErrorMessage(message);
doDisable(sig);
} // end resetOnError
public Object clone()
{
return new EditSIGProfileDialog(this);
} // end clone
} // end class EditSIGProfileDialog