From 7061d88b22233eca41546515530412ccc9422d7b Mon Sep 17 00:00:00 2001 From: "Eric J. Bowersox" Date: Sun, 13 Jun 2004 05:12:09 +0000 Subject: [PATCH] added user export functionality and refined the user import functionality, including a lot of functionality associated with VCards --- src/com/silverwrist/util/StringUtil.java | 15 +- .../venice/core/AdminOperations.java | 6 +- .../venice/core/AdminUserContext.java | 8 +- .../silverwrist/venice/core/ContactInfo.java | 6 +- .../silverwrist/venice/core/UserProfile.java | 7 +- .../venice/core/impl/AdminOperationsImpl.java | 4 +- .../core/impl/AdminUserContextImpl.java | 122 ++++- .../venice/core/impl/ContactInfoImpl.java | 102 ++++- .../venice/core/impl/UserContextImpl.java | 8 +- .../venice/core/impl/UserProfileImpl.java | 95 +++- .../venice/core/impl/VeniceEngineImpl.java | 2 +- .../venice/ui/helpers/ImportHelper.java | 35 +- .../venice/ui/helpers/UserExportHelper.java | 102 +++++ .../silverwrist/venice/util/BuildVCard.java | 429 ++++++++++++++++++ .../venice/util/BuildVCardAddress.java | 259 +++++++++++ .../venice/util/BuildVCardEmail.java | 142 ++++++ .../venice/util/BuildVCardPhone.java | 255 +++++++++++ src/com/silverwrist/venice/util/VCard.java | 184 ++++++-- .../silverwrist/venice/util/VCardAddress.java | 141 +++++- .../silverwrist/venice/util/VCardEmail.java | 84 +++- .../silverwrist/venice/util/VCardPhone.java | 136 +++++- 21 files changed, 2074 insertions(+), 68 deletions(-) create mode 100644 src/com/silverwrist/venice/ui/helpers/UserExportHelper.java create mode 100644 src/com/silverwrist/venice/util/BuildVCard.java create mode 100644 src/com/silverwrist/venice/util/BuildVCardAddress.java create mode 100644 src/com/silverwrist/venice/util/BuildVCardEmail.java create mode 100644 src/com/silverwrist/venice/util/BuildVCardPhone.java diff --git a/src/com/silverwrist/util/StringUtil.java b/src/com/silverwrist/util/StringUtil.java index f217c1e..57a4579 100644 --- a/src/com/silverwrist/util/StringUtil.java +++ b/src/com/silverwrist/util/StringUtil.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -343,6 +343,17 @@ public class StringUtil } // end isBooleanTrue + public static final boolean areEqual(String s1, String s2) + { + if (s1==null) + return (s2==null); + else if (s2==null) + return false; + else + return s1.equals(s2); + + } // end areEqual + /*-------------------------------------------------------------------------------- * Static initializer *-------------------------------------------------------------------------------- diff --git a/src/com/silverwrist/venice/core/AdminOperations.java b/src/com/silverwrist/venice/core/AdminOperations.java index 2603ff3..e3b7900 100644 --- a/src/com/silverwrist/venice/core/AdminOperations.java +++ b/src/com/silverwrist/venice/core/AdminOperations.java @@ -44,9 +44,9 @@ public interface AdminOperations public abstract void setProperties(GlobalProperties props) throws DataException; - public abstract AdminUserContext createNewAccount(String username, String password, String reminder, - boolean verify_email, boolean lockout, Role base_role, - String description, boolean auto_join) + public abstract AdminUserContext createNewAccount(String username, String password, boolean prehashed, + String reminder, boolean verify_email, boolean lockout, + Role base_role, String description, boolean auto_join) throws DataException, AccessError; public abstract List getIPBanInfo() throws DataException; diff --git a/src/com/silverwrist/venice/core/AdminUserContext.java b/src/com/silverwrist/venice/core/AdminUserContext.java index e3bd057..88102bd 100644 --- a/src/com/silverwrist/venice/core/AdminUserContext.java +++ b/src/com/silverwrist/venice/core/AdminUserContext.java @@ -9,14 +9,16 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.core; +import java.io.IOException; +import java.io.Writer; import java.util.Date; import java.util.Locale; import java.util.TimeZone; @@ -73,4 +75,6 @@ public interface AdminUserContext public abstract void setProperties(AdminUserProperties props) throws DataException; + public abstract void export(Writer xml) throws IOException, DataException; + } // end interface AdminUserContext diff --git a/src/com/silverwrist/venice/core/ContactInfo.java b/src/com/silverwrist/venice/core/ContactInfo.java index 43cf757..e6aadea 100644 --- a/src/com/silverwrist/venice/core/ContactInfo.java +++ b/src/com/silverwrist/venice/core/ContactInfo.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -126,6 +126,8 @@ public interface ContactInfo public abstract void importVCard(VCard vc); + public abstract VCard exportVCard(); + public abstract boolean canSetPhoto(); } // end interface ContactInfo diff --git a/src/com/silverwrist/venice/core/UserProfile.java b/src/com/silverwrist/venice/core/UserProfile.java index ad88c6b..138e19f 100644 --- a/src/com/silverwrist/venice/core/UserProfile.java +++ b/src/com/silverwrist/venice/core/UserProfile.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -21,6 +21,7 @@ import java.util.Date; import com.silverwrist.venice.except.AccessError; import com.silverwrist.venice.except.DataException; import com.silverwrist.venice.except.EmailException; +import com.silverwrist.venice.util.VCard; public interface UserProfile { @@ -76,6 +77,8 @@ public interface UserProfile public abstract boolean isAnonymous(); + public abstract VCard getVCard(); + public abstract boolean canSendQuickEmail(); public abstract void sendQuickEmail(String subject, String text) diff --git a/src/com/silverwrist/venice/core/impl/AdminOperationsImpl.java b/src/com/silverwrist/venice/core/impl/AdminOperationsImpl.java index e6cb494..eb608c6 100644 --- a/src/com/silverwrist/venice/core/impl/AdminOperationsImpl.java +++ b/src/com/silverwrist/venice/core/impl/AdminOperationsImpl.java @@ -276,7 +276,7 @@ class AdminOperationsImpl implements AdminOperations } // end setProperties - public AdminUserContext createNewAccount(String username, String password, String reminder, + public AdminUserContext createNewAccount(String username, String password, boolean prehashed, String reminder, boolean verify_email, boolean lockout, Role base_role, String description, boolean auto_join) throws DataException, AccessError @@ -288,7 +288,7 @@ class AdminOperationsImpl implements AdminOperations base_role = env.getDefaultRole("Global.NewUser"); // Create the user account. - ReturnNewUser rnu = UserContextImpl.createAccount(env,env.getRemoteAddress(),username,password,reminder, + ReturnNewUser rnu = UserContextImpl.createAccount(env,env.getRemoteAddress(),username,password,prehashed,reminder, verify_email,lockout,0,base_role,description); if (auto_join) diff --git a/src/com/silverwrist/venice/core/impl/AdminUserContextImpl.java b/src/com/silverwrist/venice/core/impl/AdminUserContextImpl.java index e906824..9568a00 100644 --- a/src/com/silverwrist/venice/core/impl/AdminUserContextImpl.java +++ b/src/com/silverwrist/venice/core/impl/AdminUserContextImpl.java @@ -9,14 +9,15 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.core.impl; +import java.io.*; import java.sql.*; import java.util.*; import org.apache.log4j.*; @@ -27,6 +28,8 @@ import com.silverwrist.venice.core.internals.*; import com.silverwrist.venice.db.*; import com.silverwrist.venice.except.*; import com.silverwrist.venice.security.*; +import com.silverwrist.venice.svc.SecurityMonitorEnvironment; +import com.silverwrist.venice.util.BuildVCard; class AdminUserContextImpl implements AdminUserContext { @@ -621,6 +624,121 @@ class AdminUserContextImpl implements AdminUserContext } // end setProperties + public void export(Writer xml) throws IOException, DataException + { + // get the community-level security monitor + SecurityMonitorEnvironment sm_env = + (SecurityMonitorEnvironment)(env.getGlobalSite().queryService(SecurityMonitorEnvironment.class)); + SecurityMonitor cmon = sm_env.getMonitor("Community"); + + // get the contact information + ContactInfoImpl ci = new ContactInfoImpl(env,contactid,true); + + // some things we need a database connection for... + String hash = null, reminder = null; + List join_comms = null; + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + try + { // get the password and password reminder + conn = env.getConnection(); + stmt = conn.prepareStatement("SELECT passhash, passreminder FROM users WHERE uid = ?;"); + stmt.setInt(1,uid); + rs = stmt.executeQuery(); + if (!(rs.next())) + throw new DataException("internal error: can\'t find user record for uid " + uid); + hash = rs.getString(1); + reminder = rs.getString(2); + + // get the list of communities of which we're a member + rs.close(); + stmt.close(); + stmt = conn.prepareStatement("SELECT s.alias, m.granted_lvl FROM sigmember m, sigs s " + + "WHERE s.sigid = m.sigid AND m.uid = ?;"); + stmt.setInt(1,uid); + rs = stmt.executeQuery(); + while (rs.next()) + { // load alias and grant levels + Role r = cmon.getRoleForLevel(rs.getInt(2)); + Object[] foo = new Object[] { rs.getString(1), r }; + if (join_comms==null) + join_comms = new ArrayList(); + join_comms.add(foo); + + } // end while + + if (join_comms==null) + join_comms = Collections.EMPTY_LIST; + + } // end try + catch (SQLException e) + { // translate the SQLException + throw new DataException("Database error: " + e.getMessage(),e); + + } // end catch + finally + { // shut down everything + SQLUtil.shutdown(rs); + SQLUtil.shutdown(stmt); + SQLUtil.shutdown(conn); + + } // end finally + + xml.write("\n"); + xml.write("" + username + "\n"); + xml.write("" + hash + "\n"); + xml.write("" + reminder + "\n"); + xml.write("" + description + "\n"); + xml.write("\n"); + + // get the vCard info and serialize it + BuildVCard bvc = ci.getVCardBuilder(); + bvc.setTimeZone(my_tz); + bvc.create().exportXML(xml); + + for (Iterator it=join_comms.iterator(); it.hasNext(); ) + { // add elements for communities user is a member of + Object[] foo = (Object[])(it.next()); + xml.write(""); + xml.write(foo[0].toString()); + xml.write("\n"); + + } // end for + + // all done! + xml.write("\n"); + + } // end export + /*-------------------------------------------------------------------------------- * Package-level static operations *-------------------------------------------------------------------------------- diff --git a/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java b/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java index 0fb277e..c175ccb 100644 --- a/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java +++ b/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -923,6 +923,12 @@ class ContactInfoImpl implements ContactInfo, Stashable } // end importVCard + public VCard exportVCard() + { + return getVCardBuilder().create(); + + } // end exportVCard + public boolean canSetPhoto() { return can_set_photo; @@ -1096,4 +1102,96 @@ class ContactInfoImpl implements ContactInfo, Stashable } // end stash + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + BuildVCard getVCardBuilder() + { + BuildVCard bvc = new BuildVCard(); + bvc.setFamilyName(family_name); + bvc.setGivenName(given_name); + bvc.setMiddleName(new String(new char[] { middle_initial })); + bvc.setPrefix(prefix); + bvc.setSuffix(suffix); + bvc.setOrganizationName(company); + bvc.setURL(url); + + // add the address to the VCard + BuildVCardAddress baddr = new BuildVCardAddress(); + baddr.setHomeAddress(true); + baddr.setWorkAddress(true); + baddr.setPreferred(true); + if (addr1!=null) + { // save off address + if (addr2!=null) + { // set extension, then street + baddr.setExtension(addr1); + baddr.setStreet(addr2); + + } // end if + else // set the street address + baddr.setStreet(addr1); + + } // end if + + baddr.setLocality(locality); + baddr.setRegion(region); + baddr.setPostalCode(postal_code); + baddr.setCountry(country); + bvc.addAddress(baddr.create()); + + // Add phone number. + BuildVCardPhone bphone = new BuildVCardPhone(); + if (phone!=null) + { // set attributes and number + bphone.setHomePhone(true); + bphone.setWorkPhone(true); + bphone.setVoicePhone(true); + bphone.setNumber(phone); + bvc.addPhone(bphone.create()); + bphone.reset(); + + } // end if + + // Add fax number. + if (fax!=null) + { // set attributes and number + bphone.setHomePhone(true); + bphone.setWorkPhone(true); + bphone.setFax(true); + bphone.setNumber(fax); + bvc.addPhone(bphone.create()); + bphone.reset(); + + } // end if + + // Add mobile number. + if (mobile!=null) + { // set attributes and number + bphone.setCellPhone(true); + bphone.setPCSPhone(true); + bphone.setNumber(mobile); + bvc.addPhone(bphone.create()); + + } // end if + + // Add E-mail address. + if (email!=null) + { // set attributes and address + BuildVCardEmail bemail = new BuildVCardEmail(); + bemail.setHomeEmail(true); + bemail.setWorkEmail(true); + bemail.setInternetEmail(true); + bemail.setPreferred(true); + bemail.setAddress(email); + bvc.addEmailAddress(bemail.create()); + + } // end if + + return bvc; + + } // end getVCardBuilder + } // end class ContactInfoImpl diff --git a/src/com/silverwrist/venice/core/impl/UserContextImpl.java b/src/com/silverwrist/venice/core/impl/UserContextImpl.java index 06e2466..3a5f4bb 100644 --- a/src/com/silverwrist/venice/core/impl/UserContextImpl.java +++ b/src/com/silverwrist/venice/core/impl/UserContextImpl.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -1802,7 +1802,7 @@ class UserContextImpl implements UserContext, ServiceProvider, PropertyProvider */ static final ReturnNewUser createAccount(EnvEngine env, String remote_addr, String username, String password, - String reminder, boolean verify_email, boolean lockout, + boolean prehashed, String reminder, boolean verify_email, boolean lockout, int confirm_num, Role base_role, String description) throws AccessError, DataException { @@ -1833,7 +1833,7 @@ class UserContextImpl implements UserContext, ServiceProvider, PropertyProvider SQLUtil.shutdown(rs); // Insert a new record for this user - String hash_value = Generator.hashPassword(password); + String hash_value = (prehashed ? password : Generator.hashPassword(password)); StringBuffer sql = new StringBuffer("INSERT INTO users (username, passhash, verify_email, lockout, email_confnum, " + "base_lvl, created, lastaccess, passreminder, description) VALUES ('"); diff --git a/src/com/silverwrist/venice/core/impl/UserProfileImpl.java b/src/com/silverwrist/venice/core/impl/UserProfileImpl.java index 2918899..aa707c8 100644 --- a/src/com/silverwrist/venice/core/impl/UserProfileImpl.java +++ b/src/com/silverwrist/venice/core/impl/UserProfileImpl.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -25,7 +25,7 @@ import com.silverwrist.venice.core.*; import com.silverwrist.venice.core.internals.*; import com.silverwrist.venice.db.*; import com.silverwrist.venice.except.*; -import com.silverwrist.venice.util.MailSend; +import com.silverwrist.venice.util.*; class UserProfileImpl implements UserProfile { @@ -435,6 +435,95 @@ class UserProfileImpl implements UserProfile } // end isAnonymous + public VCard getVCard() + { + BuildVCard bvc = new BuildVCard(); + bvc.setFamilyName(family_name); + bvc.setGivenName(given_name); + bvc.setMiddleName(new String(new char[] { middle_initial })); + bvc.setPrefix(prefix); + bvc.setSuffix(suffix); + bvc.setNickname(username); + bvc.setOrganizationName(company); + bvc.setNote(descr); + bvc.setURL(url); + + // add the address to the VCard + BuildVCardAddress baddr = new BuildVCardAddress(); + baddr.setHomeAddress(true); + baddr.setWorkAddress(true); + baddr.setPreferred(true); + if (addr1!=null) + { // save off address + if (addr2!=null) + { // set extension, then street + baddr.setExtension(addr1); + baddr.setStreet(addr2); + + } // end if + else // set the street address + baddr.setStreet(addr1); + + } // end if + + baddr.setLocality(locality); + baddr.setRegion(region); + baddr.setPostalCode(postal_code); + baddr.setCountry(country); + bvc.addAddress(baddr.create()); + + // Add phone number. + BuildVCardPhone bphone = new BuildVCardPhone(); + if (phone!=null) + { // set attributes and number + bphone.setHomePhone(true); + bphone.setWorkPhone(true); + bphone.setVoicePhone(true); + bphone.setNumber(phone); + bvc.addPhone(bphone.create()); + bphone.reset(); + + } // end if + + // Add fax number. + if (fax!=null) + { // set attributes and number + bphone.setHomePhone(true); + bphone.setWorkPhone(true); + bphone.setFax(true); + bphone.setNumber(fax); + bvc.addPhone(bphone.create()); + bphone.reset(); + + } // end if + + // Add mobile number. + if (mobile!=null) + { // set attributes and number + bphone.setCellPhone(true); + bphone.setPCSPhone(true); + bphone.setNumber(mobile); + bvc.addPhone(bphone.create()); + + } // end if + + // Add E-mail address. + if (email!=null) + { // set attributes and address + BuildVCardEmail bemail = new BuildVCardEmail(); + bemail.setHomeEmail(true); + bemail.setWorkEmail(true); + bemail.setInternetEmail(true); + bemail.setPreferred(true); + bemail.setAddress(email); + bvc.addEmailAddress(bemail.create()); + + } // end if + + return bvc.create(); + + } // end getVCard + public boolean canSendQuickEmail() { return !is_anon && !(env.isAnonymous()); diff --git a/src/com/silverwrist/venice/core/impl/VeniceEngineImpl.java b/src/com/silverwrist/venice/core/impl/VeniceEngineImpl.java index 4614068..8e571aa 100644 --- a/src/com/silverwrist/venice/core/impl/VeniceEngineImpl.java +++ b/src/com/silverwrist/venice/core/impl/VeniceEngineImpl.java @@ -871,7 +871,7 @@ public class VeniceEngineImpl implements VeniceEngine, ServiceProvider, EngineBa logger.debug("createNewAccount(\"" + username + "\",,)..."); // Create the user account. - ReturnNewUser rnu = UserContextImpl.createAccount(env,remote_addr,username,password,reminder,false, + ReturnNewUser rnu = UserContextImpl.createAccount(env,remote_addr,username,password,false,reminder,false, false,confirm_num,new_role,null); // create a new context for the user (they're now effectively logged in) diff --git a/src/com/silverwrist/venice/ui/helpers/ImportHelper.java b/src/com/silverwrist/venice/ui/helpers/ImportHelper.java index f4f238b..60eb32d 100644 --- a/src/com/silverwrist/venice/ui/helpers/ImportHelper.java +++ b/src/com/silverwrist/venice/ui/helpers/ImportHelper.java @@ -9,9 +9,9 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ @@ -89,10 +89,11 @@ public class ImportHelper DOMElementHelper h = new DOMElementHelper((Element)n); String id = h.getElement().getAttribute("id"); String username = null, password = null, reminder = null, description = null; - String zonehint = null; + String zonehint = null, locale = "en_US"; Role r = default_role; boolean confirm = false, locked = false, hideaddr = false, hidephone = false, hidefax = false; - boolean hideemail = false, autojoin = true; + boolean hideemail = false, autojoin = true, prehashed = false, post_pics = false, opt_out = false; + boolean no_photo = false; VCard vcard = null; ArrayList join_list = null; @@ -105,10 +106,15 @@ public class ImportHelper username = username.trim(); if (!(IDUtils.isValidVeniceID(username))) throw new ValidationException(" \"" + username + "\" is not a valid Venice ID"); - password = h.getSubElementText("password"); + Element pelt = h.getSubElement("password"); + if (pelt==null) + throw new ValidationException("no element found"); + DOMElementHelper hh = new DOMElementHelper(pelt); + password = hh.getElementText(); if (password==null) throw new ValidationException("no element found"); password = password.trim(); + prehashed = loader.loadGetAttributeBoolean(pelt,"prehashed",prehashed); reminder = h.getSubElementText("password-reminder"); if (reminder!=null) reminder = reminder.trim(); @@ -134,6 +140,11 @@ public class ImportHelper hidefax = loader.loadGetAttributeBoolean(opts,"hidefax",hidefax); hideemail = loader.loadGetAttributeBoolean(opts,"hideemail",hideemail); autojoin = loader.loadGetAttributeBoolean(opts,"autojoin",autojoin); + post_pics = loader.loadGetAttributeBoolean(opts,"postpictures",post_pics); + opt_out = loader.loadGetAttributeBoolean(opts,"optout",opt_out); + no_photo = loader.loadGetAttributeBoolean(opts,"nophoto",no_photo); + if (hopts.hasAttribute("locale")) + locale = opts.getAttribute("locale").trim(); if (hopts.hasAttribute("zonehint")) zonehint = opts.getAttribute("zonehint").trim(); @@ -229,7 +240,7 @@ public class ImportHelper // EXECUTE PHASE - make this user go! try { // create the user context - AdminUserContext uc = adm.createNewAccount(username,password,reminder,confirm,locked,r, + AdminUserContext uc = adm.createNewAccount(username,password,prehashed,reminder,confirm,locked,r, description,autojoin); // set up the contact info @@ -241,6 +252,11 @@ public class ImportHelper ci.importVCard(vcard); uc.putContactInfo(ci); + // set up the locale + Locale l = International.get().createLocale(locale); + if (l!=null) + uc.setLocale(l); + // set up the timezone String tmp = vcard.getTimeZone(); if (tmp!=null) @@ -268,6 +284,13 @@ public class ImportHelper } // end if + // set the user properties + AdminUserProperties props = uc.getProperties(); + props.setDisplayPostPictures(post_pics); + props.setMassMailOptOut(opt_out); + props.setDisallowPhoto(no_photo); + uc.setProperties(props); + if (join_list!=null) { // set up the community membership for (int j=0; j. + * + * 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) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.ui.helpers; + +import java.io.*; +import java.util.*; +import com.silverwrist.venice.core.*; +import com.silverwrist.venice.except.DataException; +import com.silverwrist.venice.except.InternalStateError; +import com.silverwrist.venice.ui.ContentExecute; +import com.silverwrist.venice.ui.RequestExec; + +public class UserExportHelper implements ContentExecute +{ + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private int m_length; + private InputStream m_stm; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public UserExportHelper(AdminOperations adm, Collection userdata) throws DataException, IOException + { + // Start by normalizing the user data. + ArrayList tmp = new ArrayList(userdata.size()); + Iterator it; + for (it=userdata.iterator(); it.hasNext(); ) + { // morph all the objects... + Object o = it.next(); + if (o==null) + continue; + if (o instanceof AdminUserContext) + tmp.add((AdminUserContext)o); + else if (o instanceof UserContext) + tmp.add(adm.getUserContext(((UserContext)o).getUID())); + else if (o instanceof UserProfile) + tmp.add(adm.getUserContext(((UserProfile)o).getUID())); + else if (o instanceof Number) + tmp.add(adm.getUserContext(((Number)o).intValue())); + else + tmp.add(adm.getUserContext(o.toString())); + + } // end for + + StringWriter wr = new StringWriter(); + wr.write("\n\n"); + for (it=tmp.iterator(); it.hasNext(); ) + { // get each user and export it + AdminUserContext uc = (AdminUserContext)(it.next()); + uc.export(wr); + + } // end for + + wr.write("\n"); + try + { // convert the output so it acts like an attachment + byte[] ary = wr.toString().getBytes("UTF-8"); + m_length = ary.length; + m_stm = new ByteArrayInputStream(ary); + + } // end try + catch (UnsupportedEncodingException e) + { // this is not supposed to happen + throw new InternalStateError("encoding not found?!?!?!?"); + + } // end catch + + } // end constructor + + /*-------------------------------------------------------------------------------- + * Implementations from interface ContentExecute + *-------------------------------------------------------------------------------- + */ + + public void execute(RequestExec req) throws IOException + { + req.sendBinary("text/xml","export-data.xml",m_length,m_stm); + + } // end execute + +} // end class UserExportHelper diff --git a/src/com/silverwrist/venice/util/BuildVCard.java b/src/com/silverwrist/venice/util/BuildVCard.java new file mode 100644 index 0000000..fb4e24c --- /dev/null +++ b/src/com/silverwrist/venice/util/BuildVCard.java @@ -0,0 +1,429 @@ +/* + * 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) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.util; + +import java.util.*; + +public class BuildVCard +{ + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private String formatted_name = null; + private String family_name = null; + private String given_name = null; + private String middle_name = null; + private String prefix = null; + private String suffix = null; + private String nickname = null; + private HashSet addresses = new HashSet(); + private HashSet phones = new HashSet(); + private HashSet email_addresses = new HashSet(); + private String mailer = null; + private String timezone = null; + private String title = null; + private String role = null; + private String orgname = null; + private String note = null; + private String sort_string = null; + private String url = null; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public BuildVCard() + { // do nothing + } // end constructor + + /*-------------------------------------------------------------------------------- + * Internal operations + *-------------------------------------------------------------------------------- + */ + + private final String realFormattedName() + { + if (formatted_name!=null) + return formatted_name; + StringBuffer buf = new StringBuffer(); + if (prefix!=null) + buf.append(prefix).append(' '); + if (given_name!=null) + buf.append(given_name); + if ((middle_name!=null) || (family_name!=null)) + buf.append(' '); + if (middle_name!=null) + { // figure out the middle name + buf.append(middle_name); + if (middle_name.length()==1) + buf.append('.'); + if (family_name!=null) + buf.append(' '); + + } // end if + + if (family_name!=null) + buf.append(family_name); + if (suffix!=null) + buf.append(' ').append(suffix); + String s = buf.toString(); + if (s.length()==0) + return null; + return s; + + } // end realFormattedName + + /*-------------------------------------------------------------------------------- + * Public getters/setters + *-------------------------------------------------------------------------------- + */ + + public final String getFormattedName() + { + return formatted_name; + + } // end getFormattedName + + public final void setFormattedName(String s) + { + formatted_name = s; + + } // end setFormattedName + + public final String getFamilyName() + { + return family_name; + + } // end getFamilyName + + public final void setFamilyName(String s) + { + family_name = s; + + } // end setFamilyName + + public final String getGivenName() + { + return given_name; + + } // end getGivenName + + public final void setGivenName(String s) + { + given_name = s; + + } // end setGivenName + + public final String getMiddleName() + { + return middle_name; + + } // end getMiddleName + + public final void setMiddleName(String s) + { + middle_name = s; + + } // end setMiddleName + + public final String getPrefix() + { + return prefix; + + } // end getPrefix + + public final void setPrefix(String s) + { + prefix = s; + + } // end setPrefix + + public final String getSuffix() + { + return suffix; + + } // end getSuffix + + public final void setSuffix(String s) + { + suffix = s; + + } // end setSuffix + + public final String getNickname() + { + return nickname; + + } // end getNickname + + public final void setNickname(String s) + { + nickname = s; + + } // end setNickname + + public final String getMailer() + { + return mailer; + + } // end getMailer + + public final void setMailer(String s) + { + mailer = s; + + } // end setMailer + + public final String getTimeZone() + { + return timezone; + + } // end getTimeZone + + public final void setTimeZone(String s) + { + if ((s!=null) && !VCard.validateTZText(s)) + throw new IllegalArgumentException("not a valid timezone string"); + timezone = s; + + } // end setTimeZone + + public final void setTimeZone(TimeZone tz) + { + int ofs = tz.getRawOffset(); + StringBuffer buf = new StringBuffer(); + if (ofs<0) + { // negative offset + buf.append('-'); + ofs = -ofs; + + } // end if + else // positive offset + buf.append('+'); + + ofs /= 60000; // convert to minutes + int hrs = ofs / 60; // get hours + if (hrs>=10) + buf.append(hrs); + else + buf.append('0').append(hrs); + buf.append(':'); + ofs -= (hrs * 60); // get minutes + if (ofs>=10) + buf.append(ofs); + else + buf.append('0').append(ofs); + timezone = buf.toString(); + + } // end setTimeZone + + public final String getTitle() + { + return title; + + } // end getTitle + + public final void setTitle(String s) + { + title = s; + + } // end setTitle + + public final String getRole() + { + return role; + + } // end getRole + + public final void setRole(String s) + { + role = s; + + } // end setRole + + public final String getOrganizationName() + { + return orgname; + + } // end getOrganizationName + + public final void setOrganizationName(String s) + { + orgname = s; + + } // end setOrganizationName + + public final String getNote() + { + return note; + + } // end getNode + + public final void setNote(String s) + { + note = s; + + } // end setNote + + public final String getSortString() + { + return sort_string; + + } // end getSortString + + public final void setSortString(String s) + { + sort_string = s; + + } // end sort_string + + public final String getURL() + { + return url; + + } // end getURL + + public final void setURL(String s) + { + url = s; + + } // end setURL + + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + public void reset() + { + formatted_name = null; + family_name = null; + given_name = null; + middle_name = null; + prefix = null; + suffix = null; + nickname = null; + addresses.clear(); + phones.clear(); + email_addresses.clear(); + mailer = null; + timezone = null; + title = null; + role = null; + orgname = null; + note = null; + sort_string = null; + url = null; + + } // end reset + + public VCard create() + { + return new VCard(realFormattedName(),family_name,given_name,middle_name,prefix,suffix,nickname,addresses,phones, + email_addresses,mailer,timezone,title,role,orgname,note,sort_string,url); + + } // end create + + public final List getAddresses() + { + if (addresses.isEmpty()) + return Collections.EMPTY_LIST; + ArrayList rc = new ArrayList(addresses); + rc.trimToSize(); + return Collections.unmodifiableList(rc); + + } // end getAddresses + + public final List getPhones() + { + if (phones.isEmpty()) + return Collections.EMPTY_LIST; + ArrayList rc = new ArrayList(phones); + rc.trimToSize(); + return Collections.unmodifiableList(rc); + + } // end getPhones + + public final List getEmailAddresses() + { + if (email_addresses.isEmpty()) + return Collections.EMPTY_LIST; + ArrayList rc = new ArrayList(email_addresses); + rc.trimToSize(); + return Collections.unmodifiableList(rc); + + } // end getEmailAddresses + + public final void addAddress(VCardAddress addr) + { + addresses.add(addr); + + } // end addAddress + + public final void removeAddress(VCardAddress addr) + { + addresses.remove(addr); + + } // end removeAddress + + public final void removeAllAddresses() + { + addresses.clear(); + + } // end removeAllAddresses + + public final void addPhone(VCardPhone phone) + { + phones.add(phone); + + } // end addPhone + + public final void removePhone(VCardPhone phone) + { + phones.remove(phone); + + } // end removePhone + + public final void removeAllPhones() + { + phones.clear(); + + } // end removeAllPhones + + public final void addEmailAddress(VCardEmail email) + { + email_addresses.add(email); + + } // end addEmailAddress + + public final void removeEmailAddress(VCardEmail email) + { + email_addresses.remove(email); + + } // end removeEmailAddress + + public final void removeAllEmailAddresses() + { + email_addresses.clear(); + + } // end removeAllEmailAddresses + +} // end class BuildVCard diff --git a/src/com/silverwrist/venice/util/BuildVCardAddress.java b/src/com/silverwrist/venice/util/BuildVCardAddress.java new file mode 100644 index 0000000..97d009d --- /dev/null +++ b/src/com/silverwrist/venice/util/BuildVCardAddress.java @@ -0,0 +1,259 @@ +/* + * 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) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.util; + +public class BuildVCardAddress +{ + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private boolean home_adr = false; + private boolean work_adr = false; + private boolean postal_adr = false; + private boolean parcel_adr = false; + private boolean domestic_adr = false; + private boolean intl_adr = false; + private boolean preferred = false; + private String pobox = null; + private String ext_address = null; + private String street = null; + private String locality = null; + private String region = null; + private String postal_code = null; + private String country = null; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public BuildVCardAddress() + { // do nothing + } // end constructor + + /*-------------------------------------------------------------------------------- + * Public getters/setters + *-------------------------------------------------------------------------------- + */ + + public final boolean isHomeAddress() + { + return home_adr; + + } // end isHomeAddress + + public final void setHomeAddress(boolean f) + { + home_adr = f; + + } // end setHomeAddress + + public final boolean isWorkAddress() + { + return work_adr; + + } // end isWorkAddress + + public final void setWorkAddress(boolean f) + { + work_adr = f; + + } // end setWorkAddress + + public final boolean isPostalAddress() + { + return postal_adr; + + } // end isPostalAddress + + public final void setPostalAddress(boolean f) + { + postal_adr = f; + + } // end setPostalAddress + + public final boolean isParcelAddress() + { + return parcel_adr; + + } // end isParcelAddress + + public final void setParcelAddress(boolean f) + { + parcel_adr = f; + + } // end setParcelAddress + + public final boolean isDomesticAddress() + { + return domestic_adr; + + } // end isDomesticAddress + + public final void setDomesticAddress(boolean f) + { + domestic_adr = f; + if (domestic_adr && intl_adr) + intl_adr = false; + + } // end setDomesticAddress + + public final boolean isInternationalAddress() + { + return intl_adr; + + } // end isInternationalAddress + + public final void setInternationalAddress(boolean f) + { + intl_adr = f; + if (domestic_adr && intl_adr) + domestic_adr = false; + + } // end setInternationalAddress + + public final boolean isPreferred() + { + return preferred; + + } // end isPreferred + + public final void setPreferred(boolean f) + { + preferred = f; + + } // end setPreferred + + public final String getPOBox() + { + return pobox; + + } // end getPOBox + + public final void setPOBox(String s) + { + pobox = s; + + } // end setPOBox + + public final String getExtension() + { + return ext_address; + + } // end getExtension + + public final void setExtension(String s) + { + ext_address = s; + + } // end setExtension + + public final String getStreet() + { + return street; + + } // end getStreet + + public final void setStreet(String s) + { + street = s; + + } // end setStreet + + public final String getLocality() + { + return locality; + + } // end getLocality + + public final void setLocality(String s) + { + locality = s; + + } // end setLocality + + public final String getRegion() + { + return region; + + } // end getRegion + + public final void setRegion(String s) + { + region = s; + + } // end setRegion + + public final String getPostalCode() + { + return postal_code; + + } // end getPostalCode + + public final void setPostalCode(String s) + { + postal_code = s; + + } // end setPostalCode + + public final String getCountry() + { + return country; + + } // end getCountry + + public final void setCountry(String s) + { + country = s; + + } // end setCountry + + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + public void reset() + { + home_adr = false; + work_adr = false; + postal_adr = false; + parcel_adr = false; + domestic_adr = false; + intl_adr = false; + preferred = false; + pobox = null; + ext_address = null; + street = null; + locality = null; + region = null; + postal_code = null; + country = null; + + } // end reset + + public VCardAddress create() + { + return new VCardAddress(home_adr,work_adr,postal_adr,parcel_adr,domestic_adr,intl_adr,preferred,pobox,ext_address, + street,locality,region,postal_code,country); + + } // end create + +} // end class BuildVCardAddress diff --git a/src/com/silverwrist/venice/util/BuildVCardEmail.java b/src/com/silverwrist/venice/util/BuildVCardEmail.java new file mode 100644 index 0000000..d0f327e --- /dev/null +++ b/src/com/silverwrist/venice/util/BuildVCardEmail.java @@ -0,0 +1,142 @@ +/* + * 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) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.util; + +public class BuildVCardEmail +{ + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private boolean home_email = false; + private boolean work_email = false; + private boolean internet_email = false; + private boolean x400_email = false; + private boolean preferred = false; + private String address = null; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public BuildVCardEmail() + { // do nothing + } // end constructor + + /*-------------------------------------------------------------------------------- + * Public getters/setters + *-------------------------------------------------------------------------------- + */ + + public final boolean isHomeEmail() + { + return home_email; + + } // end isHomeEmail + + public final void setHomeEmail(boolean f) + { + home_email = f; + + } // end setHomeEmail + + public final boolean isWorkEmail() + { + return work_email; + + } // end isHomeEmail + + public final void setWorkEmail(boolean f) + { + work_email = f; + + } // end setWorkEmail + + public final boolean isInternetEmail() + { + return internet_email; + + } // end isInternetEmail + + public final void setInternetEmail(boolean f) + { + internet_email = f; + + } // end setInternetEmail + + public final boolean isX400Email() + { + return x400_email; + + } // end isX400Email + + public final void setX400Email(boolean f) + { + x400_email = f; + + } // end setX400Email + + public final boolean isPreferred() + { + return preferred; + + } // end isPreferred + + public final void setPreferred(boolean f) + { + preferred = f; + + } // end setPreferred + + public final String getAddress() + { + return address; + + } // end getAddress + + public final void setAddress(String s) + { + address = s; + + } // end setAddress + + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + public void reset() + { + home_email = false; + work_email = false; + internet_email = false; + x400_email = false; + preferred = false; + address = null; + + } // end reset + + public VCardEmail create() + { + return new VCardEmail(home_email,work_email,internet_email,x400_email,preferred,address); + + } // end create + +} // end class BuildVCardEmail diff --git a/src/com/silverwrist/venice/util/BuildVCardPhone.java b/src/com/silverwrist/venice/util/BuildVCardPhone.java new file mode 100644 index 0000000..1a8e460 --- /dev/null +++ b/src/com/silverwrist/venice/util/BuildVCardPhone.java @@ -0,0 +1,255 @@ +/* + * 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) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.util; + +public class BuildVCardPhone +{ + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private boolean home_phone = false; + private boolean work_phone = false; + private boolean voice_phone = false; + private boolean fax_phone = false; + private boolean pager = false; + private boolean message = false; + private boolean cell_phone = false; + private boolean video_phone = false; + private boolean bbs_phone = false; + private boolean modem_phone = false; + private boolean isdn_phone = false; + private boolean pcs_phone = false; + private boolean preferred = false; + private String number = null; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public BuildVCardPhone() + { // do nothing + } // end constructor + + /*-------------------------------------------------------------------------------- + * Public getters/setters + *-------------------------------------------------------------------------------- + */ + + public final boolean isHomePhone() + { + return home_phone; + + } // end isHomePhone + + public final void setHomePhone(boolean f) + { + home_phone = f; + + } // end setHomePhone + + public final boolean isWorkPhone() + { + return work_phone; + + } // end isWorkPhone + + public final void setWorkPhone(boolean f) + { + work_phone = f; + + } // end setWorkPhone + + public final boolean isVoicePhone() + { + return voice_phone; + + } // end isVoicePhone + + public final void setVoicePhone(boolean f) + { + voice_phone = f; + + } // end setVoicePhone + + public final boolean isFax() + { + return fax_phone; + + } // end isFax + + public final void setFax(boolean f) + { + fax_phone = f; + + } // end setFax + + public final boolean isPager() + { + return pager; + + } // end isPager + + public final void setPager(boolean f) + { + pager = f; + + } // end setPager + + public final boolean isMessage() + { + return message; + + } // end isMessage + + public final void setMessage(boolean f) + { + message = f; + + } // end setMessage + + public final boolean isCellPhone() + { + return cell_phone; + + } // end isCellPhone + + public final void setCellPhone(boolean f) + { + cell_phone = f; + + } // end setCellPhone + + public final boolean isVideoPhone() + { + return video_phone; + + } // end isVideoPhone + + public final void setVideoPhone(boolean f) + { + video_phone = f; + + } // end setVideoPhone + + public final boolean isBBS() + { + return bbs_phone; + + } // end isBBS + + public final void setBBS(boolean f) + { + bbs_phone = f; + + } // end setBBS + + public final boolean isModemPhone() + { + return modem_phone; + + } // end isModemPhone + + public final void setModemPhone(boolean f) + { + modem_phone = f; + + } // end setModemPhone + + public final boolean isISDNPhone() + { + return isdn_phone; + + } // end isISDNPhone + + public final void setISDNPhone(boolean f) + { + isdn_phone = f; + + } // end setISDNPhone + + public final boolean isPCSPhone() + { + return pcs_phone; + + } // end isPCSPhone + + public final void setPCSPhone(boolean f) + { + pcs_phone = f; + + } // end setPCSPhone + + public final boolean isPreferred() + { + return preferred; + + } // end isPreferred + + public final void setPreferred(boolean f) + { + preferred = f; + + } // end setPreferred + + public final String getNumber() + { + return number; + + } // end getNumber + + public final void setNumber(String s) + { + number = s; + + } // end setNumber + + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + public void reset() + { + home_phone = false; + work_phone = false; + voice_phone = false; + fax_phone = false; + pager = false; + message = false; + cell_phone = false; + video_phone = false; + bbs_phone = false; + modem_phone = false; + isdn_phone = false; + pcs_phone = false; + preferred = false; + number = null; + + } // end reset + + public VCardPhone create() + { + return new VCardPhone(home_phone,work_phone,voice_phone,fax_phone,pager,message,cell_phone,video_phone,bbs_phone, + modem_phone,isdn_phone,pcs_phone,preferred,number); + + } // end create + +} // end class BuildVCardPhone diff --git a/src/com/silverwrist/venice/util/VCard.java b/src/com/silverwrist/venice/util/VCard.java index 8b13170..37f10f8 100644 --- a/src/com/silverwrist/venice/util/VCard.java +++ b/src/com/silverwrist/venice/util/VCard.java @@ -9,14 +9,15 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.util; +import java.io.*; import java.util.*; import org.apache.log4j.*; import org.w3c.dom.*; @@ -57,10 +58,35 @@ public class VCard private String url = null; /*-------------------------------------------------------------------------------- - * Constructor + * Constructors *-------------------------------------------------------------------------------- */ + VCard(String formatted_name, String family_name, String given_name, String middle_name, String prefix, String suffix, + String nickname, Collection addresses, Collection phones, Collection email_addresses, String mailer, + String timezone, String title, String role, String orgname, String note, String sort_string, String url) + { + this.formatted_name = formatted_name; + this.family_name = family_name; + this.given_name = given_name; + this.middle_name = middle_name; + this.prefix = prefix; + this.suffix = suffix; + this.nickname = nickname; + this.addresses.addAll(addresses); + this.phones.addAll(phones); + this.email_addresses.addAll(email_addresses); + this.mailer = mailer; + this.timezone = timezone; + this.title = title; + this.role = role; + this.orgname = orgname; + this.note = note; + this.sort_string = sort_string; + this.url = url; + + } // end constructor + public VCard(Element xml) throws ValidationException { if (!(xml.getTagName().equals("vCard"))) @@ -183,6 +209,35 @@ public class VCard } // end cleanup + static final boolean validateTZText(String s) + { + if (s.equals("Z") || s.equals("z")) + return true; + + // validate the offset string + boolean valid = (s.length()>=3) && ((s.charAt(0)=='+') || (s.charAt(0)=='-')); + if (valid) + valid = ((s.charAt(1)>='0') && (s.charAt(1)<='9')); + if (valid) + valid = ((s.charAt(2)>='0') && (s.charAt(2)<='9')); + if (!valid) + return false; + if (s.length()>3) + { // validate the last bit of the string + if (s.charAt(3)==':') // +hh:mm or -hh:mm + valid = ( (s.length()==6) && (s.charAt(4)>='0') && (s.charAt(4)<='9') && (s.charAt(5)>='0') + && (s.charAt(5)<='9')); + else // +hhmm or -hhmm + valid = ( (s.length()==5) && (s.charAt(3)>='0') && (s.charAt(3)<='9') && (s.charAt(4)>='0') + && (s.charAt(4)<='9')); + + } // end if + // else it's just a +hh or -hh notation + + return valid; + + } // end validateTZText + private static final String readElemText(Element elt) { DOMElementHelper h = new DOMElementHelper(elt); @@ -199,31 +254,7 @@ public class VCard s = s.trim(); // Validate that this is a proper ISO 8601 time zone offset. - boolean valid; - if (s.equals("Z") || s.equals("z")) - valid = true; // "Z" = Zulu time! - else - { // validate the offset string - valid = (s.length()>=3) && ((s.charAt(0)=='+') || (s.charAt(0)=='-')); - if (valid) - valid = ((s.charAt(1)>='0') && (s.charAt(1)<='9')); - if (valid) - valid = ((s.charAt(2)>='0') && (s.charAt(2)<='9')); - if (s.length()>3) - { // validate the last bit of the string - if (s.charAt(3)==':') // +hh:mm or -hh:mm - valid = ( (s.length()==6) && (s.charAt(4)>='0') && (s.charAt(4)<='9') && (s.charAt(5)>='0') - && (s.charAt(5)<='9')); - else // +hhmm or -hhmm - valid = ( (s.length()==5) && (s.charAt(3)>='0') && (s.charAt(3)<='9') && (s.charAt(4)>='0') - && (s.charAt(4)<='9')); - - } // end if - // else it's just a +hh or -hh notation - - } // end else - - if (!valid) + if (!validateTZText(s)) { // the time zone text is not valid logger.error(" text invalid (" + s + ")"); throw new ValidationException(" value is not a valid ISO 8601 time zone offset"); @@ -379,6 +410,36 @@ public class VCard *-------------------------------------------------------------------------------- */ + public final List getAddresses() + { + if (addresses.isEmpty()) + return Collections.EMPTY_LIST; + ArrayList rc = new ArrayList(addresses); + rc.trimToSize(); + return Collections.unmodifiableList(rc); + + } // end getAddresses + + public final List getPhones() + { + if (phones.isEmpty()) + return Collections.EMPTY_LIST; + ArrayList rc = new ArrayList(phones); + rc.trimToSize(); + return Collections.unmodifiableList(rc); + + } // end getPhones + + public final List getEmailAddresses() + { + if (email_addresses.isEmpty()) + return Collections.EMPTY_LIST; + ArrayList rc = new ArrayList(email_addresses); + rc.trimToSize(); + return Collections.unmodifiableList(rc); + + } // end getEmailAddresses + public final VCardAddress getPreferredAddress() { return findAddress(new VCardAddress.Predicate(){ @@ -524,4 +585,71 @@ public class VCard } // end getInternetEmail + public final void exportXML(Writer xml_writer) throws IOException + { + xml_writer.write("\n2.0\n"); + if (formatted_name!=null) + xml_writer.write("" + formatted_name + "\n"); + if ((family_name!=null) || (given_name!=null) || (middle_name!=null) || (prefix!=null) || (suffix!=null)) + { // write out the "N" block + xml_writer.write(""); + if (family_name!=null) + xml_writer.write("" + family_name + ""); + if (given_name!=null) + xml_writer.write("" + given_name + ""); + if (middle_name!=null) + xml_writer.write("" + middle_name + ""); + if (prefix!=null) + xml_writer.write("" + prefix + ""); + if (suffix!=null) + xml_writer.write("" + suffix + ""); + xml_writer.write("\n"); + + } // end if + + if (nickname!=null) + xml_writer.write("" + nickname + "\n"); + + Iterator it; + for (it=addresses.iterator(); it.hasNext(); ) + { // get each address and output it + VCardAddress addr = (VCardAddress)(it.next()); + addr.exportXML(xml_writer); + + } // end for + + for (it=phones.iterator(); it.hasNext(); ) + { // get each phone number and output it + VCardPhone phone = (VCardPhone)(it.next()); + phone.exportXML(xml_writer); + + } // end for + + for (it=email_addresses.iterator(); it.hasNext(); ) + { // get each E-mail address and output it + VCardEmail addr = (VCardEmail)(it.next()); + addr.exportXML(xml_writer); + + } // end for + + if (mailer!=null) + xml_writer.write("" + mailer + "\n"); + if (timezone!=null) + xml_writer.write("" + timezone + "\n"); + if (title!=null) + xml_writer.write("" + title + "\n"); + if (role!=null) + xml_writer.write("" + role + "\n"); + if (orgname!=null) + xml_writer.write("" + orgname + "\n"); + if (note!=null) + xml_writer.write("" + note + "\n"); + if (sort_string!=null) + xml_writer.write("" + sort_string + "\n"); + if (url!=null) + xml_writer.write("" + url + "\n"); + xml_writer.write("\n"); + + } // end exportXML + } // end class VCard diff --git a/src/com/silverwrist/venice/util/VCardAddress.java b/src/com/silverwrist/venice/util/VCardAddress.java index 2dcc8be..8512e07 100644 --- a/src/com/silverwrist/venice/util/VCardAddress.java +++ b/src/com/silverwrist/venice/util/VCardAddress.java @@ -9,14 +9,15 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.util; +import java.io.*; import org.w3c.dom.*; import com.silverwrist.util.*; import com.silverwrist.venice.except.*; @@ -55,10 +56,31 @@ public class VCardAddress private String country; /*-------------------------------------------------------------------------------- - * Constructor + * Constructors *-------------------------------------------------------------------------------- */ + VCardAddress(boolean home_adr, boolean work_adr, boolean postal_adr, boolean parcel_adr, boolean domestic_adr, + boolean intl_adr, boolean preferred, String pobox, String ext_address, String street, String locality, + String region, String postal_code, String country) + { + this.home_adr = home_adr; + this.work_adr = work_adr; + this.postal_adr = postal_adr; + this.parcel_adr = parcel_adr; + this.domestic_adr = domestic_adr; + this.intl_adr = intl_adr; + this.preferred = preferred; + this.pobox = pobox; + this.ext_address = ext_address; + this.street = street; + this.locality = locality; + this.region = region; + this.postal_code = postal_code; + this.country = country; + + } // end constructor + VCardAddress(Element adr) throws ValidationException { DOMElementHelper h = new DOMElementHelper(adr); @@ -81,6 +103,119 @@ public class VCardAddress } // end constructor + /*-------------------------------------------------------------------------------- + * Internal operations + *-------------------------------------------------------------------------------- + */ + + final void exportXML(Writer xml_writer) throws IOException + { + xml_writer.write(""); + if (home_adr) + xml_writer.write(""); + if (work_adr) + xml_writer.write(""); + if (postal_adr) + xml_writer.write(""); + if (parcel_adr) + xml_writer.write(""); + if (domestic_adr) + xml_writer.write(""); + if (intl_adr) + xml_writer.write(""); + if (preferred) + xml_writer.write(""); + xml_writer.write("\n"); + if (pobox!=null) + xml_writer.write("" + pobox + "\n"); + if (ext_address!=null) + xml_writer.write("" + ext_address + "\n"); + if (street!=null) + xml_writer.write("" + street + "\n"); + if (locality!=null) + xml_writer.write("" + locality + "\n"); + if (region!=null) + xml_writer.write("" + region + "\n"); + if (postal_code!=null) + xml_writer.write("" + postal_code + "\n"); + if (country!=null) + xml_writer.write("" + country + "\n"); + xml_writer.write("\n"); + + } // end exportXML + + /*-------------------------------------------------------------------------------- + * Overrides from class Object + *-------------------------------------------------------------------------------- + */ + + public boolean equals(Object o) + { + if ((o==null) || !(o instanceof VCardAddress)) + return false; + VCardAddress other = (VCardAddress)o; + if ( (home_adr!=other.home_adr) || (work_adr!=other.work_adr) || (postal_adr!=other.postal_adr) + || (parcel_adr!=other.parcel_adr) || (domestic_adr!=other.domestic_adr) || (intl_adr!=other.intl_adr) + || (preferred!=other.preferred)) + return false; + if (!StringUtil.areEqual(pobox,other.pobox)) + return false; + if (!StringUtil.areEqual(ext_address,other.ext_address)) + return false; + if (!StringUtil.areEqual(street,other.street)) + return false; + if (!StringUtil.areEqual(locality,other.locality)) + return false; + if (!StringUtil.areEqual(region,other.region)) + return false; + if (!StringUtil.areEqual(postal_code,other.postal_code)) + return false; + return StringUtil.areEqual(country,other.country); + + } // end equals + + public int hashCode() + { + int rc = 0; + int mask = 0x40000000; + if (home_adr) + rc |= mask; + mask >>= 1; + if (work_adr) + rc |= mask; + mask >>= 1; + if (postal_adr) + rc |= mask; + mask >>= 1; + if (parcel_adr) + rc |= mask; + mask >>= 1; + if (domestic_adr) + rc |= mask; + mask >>= 1; + if (intl_adr) + rc |= mask; + mask >>= 1; + if (preferred) + rc |= mask; + if (pobox!=null) + rc ^= pobox.hashCode(); + if (ext_address!=null) + rc ^= ext_address.hashCode(); + if (street!=null) + rc ^= street.hashCode(); + if (locality!=null) + rc ^= locality.hashCode(); + if (region!=null) + rc ^= region.hashCode(); + if (postal_code!=null) + rc ^= postal_code.hashCode(); + if (country!=null) + rc ^= country.hashCode(); + return rc; + + } // end hashCode + /*-------------------------------------------------------------------------------- * External getters/setters *-------------------------------------------------------------------------------- diff --git a/src/com/silverwrist/venice/util/VCardEmail.java b/src/com/silverwrist/venice/util/VCardEmail.java index c74835d..dfc882b 100644 --- a/src/com/silverwrist/venice/util/VCardEmail.java +++ b/src/com/silverwrist/venice/util/VCardEmail.java @@ -9,14 +9,15 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.util; +import java.io.*; import org.w3c.dom.*; import com.silverwrist.util.*; import com.silverwrist.venice.except.*; @@ -47,10 +48,22 @@ public class VCardEmail private String address; /*-------------------------------------------------------------------------------- - * Constructor + * Constructors *-------------------------------------------------------------------------------- */ + VCardEmail(boolean home_email, boolean work_email, boolean internet_email, boolean x400_email, boolean preferred, + String address) + { + this.home_email = home_email; + this.work_email = work_email; + this.internet_email = internet_email; + this.x400_email = x400_email; + this.preferred = preferred; + this.address = address; + + } // end constructor + VCardEmail(Element elt) { DOMElementHelper h = new DOMElementHelper(elt); @@ -67,6 +80,71 @@ public class VCardEmail } // end constructor + /*-------------------------------------------------------------------------------- + * Internal operations + *-------------------------------------------------------------------------------- + */ + + final void exportXML(Writer xml_writer) throws IOException + { + xml_writer.write(""); + if (home_email) + xml_writer.write(""); + if (work_email) + xml_writer.write(""); + if (internet_email) + xml_writer.write(""); + if (x400_email) + xml_writer.write(""); + if (preferred) + xml_writer.write(""); + if (address!=null) + xml_writer.write("" + address + ""); + xml_writer.write("\n"); + + } // end exportXML + + /*-------------------------------------------------------------------------------- + * Overrides from class Object + *-------------------------------------------------------------------------------- + */ + + public boolean equals(Object o) + { + if ((o==null) || !(o instanceof VCardEmail)) + return false; + VCardEmail other = (VCardEmail)o; + if ( (home_email!=other.home_email) || (work_email!=other.work_email) || (internet_email!=other.internet_email) + || (x400_email!=other.x400_email) || (preferred!=other.preferred)) + return false; + return StringUtil.areEqual(address,other.address); + + } // end equals + + public int hashCode() + { + int rc = 0; + int mask = 0x40000000; + if (home_email) + rc |= mask; + mask >>= 1; + if (work_email) + rc |= mask; + mask >>= 1; + if (internet_email) + rc |= mask; + mask >>= 1; + if (x400_email) + rc |= mask; + mask >>= 1; + if (preferred) + rc |= mask; + if (address!=null) + rc ^= address.hashCode(); + return rc; + + } // end hashCode + /*-------------------------------------------------------------------------------- * External getters/setters *-------------------------------------------------------------------------------- diff --git a/src/com/silverwrist/venice/util/VCardPhone.java b/src/com/silverwrist/venice/util/VCardPhone.java index 1bd30a9..74f5f64 100644 --- a/src/com/silverwrist/venice/util/VCardPhone.java +++ b/src/com/silverwrist/venice/util/VCardPhone.java @@ -9,14 +9,15 @@ * * The Original Code is the Venice Web Communities System. * - * The Initial Developer of the Original Code is Eric J. Bowersox , + * 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. + * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * * Contributor(s): */ package com.silverwrist.venice.util; +import java.io.*; import org.w3c.dom.*; import com.silverwrist.util.*; import com.silverwrist.venice.except.*; @@ -55,10 +56,31 @@ public class VCardPhone private String number; /*-------------------------------------------------------------------------------- - * Constructor + * Constructors *-------------------------------------------------------------------------------- */ + VCardPhone(boolean home_phone, boolean work_phone, boolean voice_phone, boolean fax_phone, boolean pager, + boolean message, boolean cell_phone, boolean video_phone, boolean bbs_phone, boolean modem_phone, + boolean isdn_phone, boolean pcs_phone, boolean preferred, String number) + { + this.home_phone = home_phone; + this.work_phone = work_phone; + this.voice_phone = voice_phone; + this.fax_phone = fax_phone; + this.pager = pager; + this.message = message; + this.cell_phone = cell_phone; + this.video_phone = video_phone; + this.bbs_phone = bbs_phone; + this.modem_phone = modem_phone; + this.isdn_phone = isdn_phone; + this.pcs_phone = pcs_phone; + this.preferred = preferred; + this.number = number; + + } // end constructor + VCardPhone(Element elt) { DOMElementHelper h = new DOMElementHelper(elt); @@ -81,6 +103,114 @@ public class VCardPhone } // end constructor + /*-------------------------------------------------------------------------------- + * Internal operations + *-------------------------------------------------------------------------------- + */ + + final void exportXML(Writer xml_writer) throws IOException + { + xml_writer.write(""); + if (home_phone) + xml_writer.write(""); + if (work_phone) + xml_writer.write(""); + if (voice_phone) + xml_writer.write(""); + if (fax_phone) + xml_writer.write(""); + if (pager) + xml_writer.write(""); + if (message) + xml_writer.write(""); + if (cell_phone) + xml_writer.write(""); + if (video_phone) + xml_writer.write("\n"); + + } // end exportXML + + /*-------------------------------------------------------------------------------- + * Overrides from class Object + *-------------------------------------------------------------------------------- + */ + + public boolean equals(Object o) + { + if ((o==null) || !(o instanceof VCardPhone)) + return false; + VCardPhone other = (VCardPhone)o; + if ( (home_phone!=other.home_phone) || (work_phone!=other.work_phone) || (voice_phone!=other.voice_phone) + || (fax_phone!=other.fax_phone) || (pager!=other.pager) || (message!=other.message) + || (cell_phone!=other.cell_phone) || (video_phone!=other.video_phone) || (bbs_phone!=other.bbs_phone) + || (modem_phone!=other.modem_phone) || (isdn_phone!=other.isdn_phone) || (pcs_phone!=other.pcs_phone) + || (preferred==other.preferred)) + return false; + return StringUtil.areEqual(number,other.number); + + } // end equals + + public int hashCode() + { + int rc = 0; + int mask = 0x40000000; + if (home_phone) + rc |= mask; + mask >>= 1; + if (work_phone) + rc |= mask; + mask >>= 1; + if (voice_phone) + rc |= mask; + mask >>= 1; + if (fax_phone) + rc |= mask; + mask >>= 1; + if (pager) + rc |= mask; + mask >>= 1; + if (message) + rc |= mask; + mask >>= 1; + if (cell_phone) + rc |= mask; + mask >>= 1; + if (video_phone) + rc |= mask; + mask >>= 1; + if (bbs_phone) + rc |= mask; + mask >>= 1; + if (modem_phone) + rc |= mask; + mask >>= 1; + if (isdn_phone) + rc |= mask; + mask >>= 1; + if (pcs_phone) + rc |= mask; + mask >>= 1; + if (preferred) + rc |= mask; + if (number!=null) + rc ^= number.hashCode(); + return rc; + + } // end hashCode + /*-------------------------------------------------------------------------------- * External getters/setters *--------------------------------------------------------------------------------