/* * 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 . * * 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 , * 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