/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2011 Paco Avila & Josep Llort * * No bytes were intentionally harmed during the development of this application. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.openkm.util; import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.jackrabbit.util.ISO8601; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.openkm.api.OKMDocument; import com.openkm.api.OKMFolder; import com.openkm.api.OKMMail; import com.openkm.api.OKMPropertyGroup; import com.openkm.api.OKMRepository; import com.openkm.bean.DashboardDocumentResult; import com.openkm.bean.DashboardFolderResult; import com.openkm.bean.DashboardMailResult; import com.openkm.bean.Document; import com.openkm.bean.Folder; import com.openkm.bean.Lock; import com.openkm.bean.Mail; import com.openkm.bean.Note; import com.openkm.bean.PropertyGroup; import com.openkm.bean.QueryResult; import com.openkm.bean.Version; import com.openkm.bean.form.Button; import com.openkm.bean.form.CheckBox; import com.openkm.bean.form.Download; import com.openkm.bean.form.FormElement; import com.openkm.bean.form.Input; import com.openkm.bean.form.Node; import com.openkm.bean.form.Option; import com.openkm.bean.form.Print; import com.openkm.bean.form.Select; import com.openkm.bean.form.Separator; import com.openkm.bean.form.SuggestBox; import com.openkm.bean.form.Text; import com.openkm.bean.form.TextArea; import com.openkm.bean.form.Upload; import com.openkm.bean.form.Validator; import com.openkm.bean.workflow.Comment; import com.openkm.bean.workflow.ProcessDefinition; import com.openkm.bean.workflow.ProcessInstance; import com.openkm.bean.workflow.TaskInstance; import com.openkm.bean.workflow.Token; import com.openkm.bean.workflow.Transition; import com.openkm.core.AccessDeniedException; import com.openkm.core.Config; import com.openkm.core.DatabaseException; import com.openkm.core.ParseException; import com.openkm.core.PathNotFoundException; import com.openkm.core.RepositoryException; import com.openkm.dao.KeyValueDAO; import com.openkm.dao.bean.Activity; import com.openkm.dao.bean.Bookmark; import com.openkm.dao.bean.KeyValue; import com.openkm.dao.bean.Language; import com.openkm.dao.bean.QueryParams; import com.openkm.dao.bean.Report; import com.openkm.dao.bean.UserConfig; import com.openkm.extension.dao.bean.Contact; import com.openkm.extension.dao.bean.Forum; import com.openkm.extension.dao.bean.ForumPost; import com.openkm.extension.dao.bean.ForumTopic; import com.openkm.extension.dao.bean.MessageReceived; import com.openkm.extension.dao.bean.MessageSent; import com.openkm.extension.dao.bean.ProposedQueryReceived; import com.openkm.extension.dao.bean.ProposedQuerySent; import com.openkm.extension.dao.bean.ProposedSubscriptionReceived; import com.openkm.extension.dao.bean.ProposedSubscriptionSent; import com.openkm.extension.dao.bean.StampImage; import com.openkm.extension.dao.bean.StampText; import com.openkm.extension.dao.bean.Staple; import com.openkm.extension.dao.bean.StapleGroup; import com.openkm.frontend.client.bean.GWTBookmark; import com.openkm.frontend.client.bean.GWTComment; import com.openkm.frontend.client.bean.GWTDashboardDocumentResult; import com.openkm.frontend.client.bean.GWTDashboardFolderResult; import com.openkm.frontend.client.bean.GWTDashboardMailResult; import com.openkm.frontend.client.bean.GWTDocument; import com.openkm.frontend.client.bean.GWTFolder; import com.openkm.frontend.client.bean.GWTKeyValue; import com.openkm.frontend.client.bean.GWTLanguage; import com.openkm.frontend.client.bean.GWTLock; import com.openkm.frontend.client.bean.GWTMail; import com.openkm.frontend.client.bean.GWTNote; import com.openkm.frontend.client.bean.GWTProcessDefinition; import com.openkm.frontend.client.bean.GWTProcessInstance; import com.openkm.frontend.client.bean.GWTPropertyGroup; import com.openkm.frontend.client.bean.GWTPropertyParams; import com.openkm.frontend.client.bean.GWTQueryParams; import com.openkm.frontend.client.bean.GWTQueryResult; import com.openkm.frontend.client.bean.GWTReport; import com.openkm.frontend.client.bean.GWTTaskInstance; import com.openkm.frontend.client.bean.GWTToken; import com.openkm.frontend.client.bean.GWTTransition; import com.openkm.frontend.client.bean.GWTUserConfig; import com.openkm.frontend.client.bean.GWTVersion; import com.openkm.frontend.client.bean.GWTWorkflowComment; import com.openkm.frontend.client.bean.extension.GWTActivity; import com.openkm.frontend.client.bean.extension.GWTContact; import com.openkm.frontend.client.bean.extension.GWTForum; import com.openkm.frontend.client.bean.extension.GWTForumPost; import com.openkm.frontend.client.bean.extension.GWTForumTopic; import com.openkm.frontend.client.bean.extension.GWTMessageReceived; import com.openkm.frontend.client.bean.extension.GWTProposedQueryReceived; import com.openkm.frontend.client.bean.extension.GWTProposedQuerySent; import com.openkm.frontend.client.bean.extension.GWTProposedSubscriptionReceived; import com.openkm.frontend.client.bean.extension.GWTProposedSubscriptionSent; import com.openkm.frontend.client.bean.extension.GWTStamp; import com.openkm.frontend.client.bean.extension.GWTStaple; import com.openkm.frontend.client.bean.extension.GWTStapleGroup; import com.openkm.frontend.client.bean.extension.GWTTextMessageSent; import com.openkm.frontend.client.bean.form.GWTButton; import com.openkm.frontend.client.bean.form.GWTCheckBox; import com.openkm.frontend.client.bean.form.GWTDownload; import com.openkm.frontend.client.bean.form.GWTFormElement; import com.openkm.frontend.client.bean.form.GWTInput; import com.openkm.frontend.client.bean.form.GWTNode; import com.openkm.frontend.client.bean.form.GWTOption; import com.openkm.frontend.client.bean.form.GWTPrint; import com.openkm.frontend.client.bean.form.GWTSelect; import com.openkm.frontend.client.bean.form.GWTSeparator; import com.openkm.frontend.client.bean.form.GWTSuggestBox; import com.openkm.frontend.client.bean.form.GWTText; import com.openkm.frontend.client.bean.form.GWTTextArea; import com.openkm.frontend.client.bean.form.GWTUpload; import com.openkm.frontend.client.bean.form.GWTValidator; public class GWTUtil { private static Logger log = LoggerFactory.getLogger(GWTUtil.class); /** * Copy the Document data to GWTDocument data. * * @param doc The original Document object. * @return A GWTDocument object with the data from * the original Document. */ public static GWTDocument copy(Document doc) { log.debug("copy({})", doc); GWTDocument gWTDoc = new GWTDocument(); gWTDoc.setKeywords(doc.getKeywords()); gWTDoc.setMimeType(doc.getMimeType()); gWTDoc.setName(GWTUtil.getName(doc.getPath())); gWTDoc.setParent(GWTUtil.getParent(doc.getPath())); gWTDoc.setParentId(GWTUtil.getParent(doc.getPath())); gWTDoc.setPath(doc.getPath()); gWTDoc.setAuthor(doc.getAuthor()); gWTDoc.setCreated(doc.getCreated().getTime()); gWTDoc.setLastModified(doc.getLastModified().getTime()); gWTDoc.setCheckedOut(doc.isCheckedOut()); gWTDoc.setLocked(doc.isLocked()); gWTDoc.setSubscribed(doc.isSubscribed()); gWTDoc.setActualVersion(copy(doc.getActualVersion())); gWTDoc.setPermissions(doc.getPermissions()); gWTDoc.setLockInfo(copy(doc.getLockInfo())); gWTDoc.setConvertibleToPdf(doc.isConvertibleToPdf()); gWTDoc.setConvertibleToSwf(doc.isConvertibleToSwf()); gWTDoc.setConvertibleToDxf(doc.isConvertibleToDxf()); gWTDoc.setCipherName(doc.getCipherName()); gWTDoc.setSubscriptors(doc.getSubscriptors()); gWTDoc.setUuid(doc.getUuid()); gWTDoc.setNotes(copy(doc.getNotes())); for (Iterator<Note> it = doc.getNotes().iterator(); it.hasNext() && !gWTDoc.isHasNotes();) { Note note = it.next(); if (!note.getUser().equals(Config.SYSTEM_USER)) { gWTDoc.setHasNotes(true); } } Set<GWTFolder> categories = new HashSet<GWTFolder>(); for (Iterator<Folder> it = doc.getCategories().iterator(); it.hasNext();) { categories.add(copy(it.next())); } gWTDoc.setCategories(categories); log.debug("copy: {}", gWTDoc); return gWTDoc; } /** * Copy the GWTDocument data to Document data. * * @param gWTDoc The original GWTDocument object. * @return A Document object with the data form de original GWTDocument */ public static Document copy(GWTDocument gWTDoc) { log.debug("copy({})", gWTDoc); Document doc = new Document(); Calendar cal = Calendar.getInstance(); doc.setKeywords(gWTDoc.getKeywords()); doc.setMimeType(gWTDoc.getMimeType()); doc.setPath(gWTDoc.getPath()); doc.setAuthor(gWTDoc.getAuthor()); cal.setTime(gWTDoc.getCreated()); doc.setCreated(cal); cal.setTime(gWTDoc.getLastModified()); doc.setLastModified(cal); doc.setCheckedOut(gWTDoc.isCheckedOut()); doc.setLocked(gWTDoc.isLocked()); doc.setActualVersion(GWTUtil.copy(gWTDoc.getActualVersion())); doc.setPermissions(gWTDoc.getPermissions()); doc.setSubscribed(gWTDoc.isSubscribed()); doc.setSubscriptors(gWTDoc.getSubscriptors()); Set <Folder> categories = new HashSet<Folder>(); for (Iterator<GWTFolder> it = gWTDoc.getCategories().iterator(); it.hasNext();){ categories.add(copy(it.next())); } doc.setCategories(categories); gWTDoc.setActualVersion(copy(doc.getActualVersion())); log.debug("copy: {}", gWTDoc); return doc; } /** * Copy the Folder data to GWTFolder data. * * @param doc The original Folder object. * @return A GWTFolder object with the data from * the original Document. */ public static GWTFolder copy(Folder fld) { log.debug("copy({})", fld); GWTFolder gWTFolder = new GWTFolder(); gWTFolder.setUuid(fld.getUuid()); gWTFolder.setPath(fld.getPath()); gWTFolder.setParentPath(GWTUtil.getParent(fld.getPath())); gWTFolder.setName(GWTUtil.getName(fld.getPath())); gWTFolder.setHasChilds(fld.getHasChilds()); gWTFolder.setCreated(fld.getCreated().getTime()); gWTFolder.setPermissions(fld.getPermissions()); gWTFolder.setAuthor(fld.getAuthor()); gWTFolder.setSubscribed(fld.isSubscribed()); gWTFolder.setSubscriptors(fld.getSubscriptors()); gWTFolder.setNotes(copy(fld.getNotes())); for (Iterator<Note> it = fld.getNotes().iterator(); it.hasNext() && !gWTFolder.isHasNotes();) { Note note = it.next(); if (!note.getUser().equals(Config.SYSTEM_USER)) { gWTFolder.setHasNotes(true); } } log.debug("copy: {}", gWTFolder); return gWTFolder; } /** * Copy the GWTFolder data to Folder data. * * @param doc The original GWTFolder object. * @return A Folder object with the data from * the original Document. */ public static Folder copy(GWTFolder fld) { log.debug("copy({})", fld); Folder folder = new Folder(); folder.setUuid(fld.getUuid()); folder.setPath(fld.getPath()); folder.setHasChilds(fld.getHasChilds()); Calendar created = Calendar.getInstance(); created.setTimeInMillis(fld.getCreated().getTime()); folder.setCreated(created); folder.setPermissions(fld.getPermissions()); folder.setAuthor(fld.getAuthor()); folder.setSubscribed(fld.isSubscribed()); folder.setSubscriptors(fld.getSubscriptors()); log.debug("copy: {}", folder); return folder; } /** * Copy the Version data to GWTVersion data. * * @param doc The original Version object. * @return A GWTVersion object with the data from * the original Document. */ public static GWTVersion copy(Version version) { log.debug("copy({})", version); GWTVersion gWTVersion = new GWTVersion(); gWTVersion.setCreated(version.getCreated().getTime()); gWTVersion.setName(version.getName()); gWTVersion.setSize(version.getSize()); gWTVersion.setAuthor(version.getAuthor()); gWTVersion.setActual(version.isActual()); gWTVersion.setComment(version.getComment()); log.debug("copy: {}", gWTVersion); return gWTVersion; } /** * Copy the GWTVersion data to Version data object * * @param gWTVersion The original GWTVersion * @return A Version object with the data from the original GWTVersion */ public static Version copy(GWTVersion gWTVersion) { log.debug("copy({})", gWTVersion); Version version = new Version(); Calendar cal = Calendar.getInstance(); version.setName(gWTVersion.getName()); version.setSize(gWTVersion.getSize()); version.setAuthor(gWTVersion.getAuthor()); version.setActual(gWTVersion.isActual()); cal.setTime(gWTVersion.getCreated()); version.setCreated(cal); version.setComment(gWTVersion.getComment()); log.debug("copy: {}", version); return version; } /** * Copy the Lock data to GWTLock data. * * @param doc The original Version object. * @return A GWTLock object with the data from * the original Lock. */ public static GWTLock copy(Lock lock) { log.debug("copy({})", lock); GWTLock gWTLock = new GWTLock(); if (lock != null) { gWTLock.setNodePath(lock.getNodePath()); gWTLock.setOwner(lock.getOwner()); gWTLock.setToken(lock.getToken()); } log.debug("copy: {}", gWTLock); return gWTLock; } /** * Copy the Bookmark data to GWTBookmark data. * * @param bookmark The original Version object. * @return A GWTBookmark object with the data from * the original Bookmark. */ public static GWTBookmark copy(Bookmark bookmark) { log.debug("copy({})", bookmark); GWTBookmark gWTBookmark = new GWTBookmark(); if (bookmark != null) { gWTBookmark.setId(bookmark.getId()); gWTBookmark.setName(bookmark.getName()); gWTBookmark.setPath(bookmark.getPath()); gWTBookmark.setUuid(bookmark.getUuid()); gWTBookmark.setType(bookmark.getType()); } log.debug("copy: {}", gWTBookmark); return gWTBookmark; } /** * Get parent item path from path. * * @param path The complete item path. * @return The parent item path. */ public static String getParent(String path) { log.debug("getParent({})", path); int lastSlash = path.lastIndexOf('/'); String ret = (lastSlash > 0)?path.substring(0, lastSlash):""; log.debug("getParent: {}", ret); return ret; } /** * Get item name from path. * * @param path The complete item path. * @return The name of the item. */ public static String getName(String path) { log.debug("getName({})", path); String ret = path.substring(path.lastIndexOf('/')+1); log.debug("getName: {}", ret); return ret; } /** * Copy the gWTparams data to GWTQueryParams data object * * @param gWTParams The original GWTQueryParams * @return The QueryParams object with the data from de original GWTQueryParams */ public static QueryParams copy(GWTQueryParams gWTParams) { QueryParams params = new QueryParams(); params.setId(gWTParams.getId()); params.setQueryName(gWTParams.getQueryName()); params.setContent(gWTParams.getContent()); String keywords = gWTParams.getKeywords().trim(); Set<String> tmpKwd = new HashSet<String>(); if (!keywords.equals("")) { String kw[] = keywords.split(" "); for (int i=0; i<kw.length; i++) { tmpKwd.add(kw[i]); } } params.setKeywords(tmpKwd); params.setMimeType(gWTParams.getMimeType()); params.setName(gWTParams.getName()); Map<String, String> properties = new HashMap<String, String>(); for (Iterator<String> it = gWTParams.getProperties().keySet().iterator(); it.hasNext();) { String key = it.next(); properties.put(key, gWTParams.getProperties().get(key).getValue()); } params.setProperties(properties); params.setPath(gWTParams.getPath()); String categories = gWTParams.getCategoryUuid().trim(); Set<String> tmpCat = new HashSet<String>(); if (!categories.equals("")) { tmpCat.add(categories); } params.setCategories(tmpCat); params.setAuthor(gWTParams.getAuthor()); Calendar lastModifiedFrom = Calendar.getInstance(); Calendar lastModifiedTo = Calendar.getInstance(); if (gWTParams.getLastModifiedFrom() != null && gWTParams.getLastModifiedTo() != null) { lastModifiedFrom.setTime(gWTParams.getLastModifiedFrom()); lastModifiedTo.setTime(gWTParams.getLastModifiedTo()); } else { lastModifiedFrom = null; lastModifiedTo = null; } params.setLastModifiedFrom(lastModifiedFrom); params.setLastModifiedTo(lastModifiedTo); params.setDashboard(gWTParams.isDashboard()); params.setDomain(gWTParams.getDomain()); params.setMailSubject(gWTParams.getMailSubject()); params.setMailTo(gWTParams.getMailTo()); params.setMailFrom(gWTParams.getMailFrom()); params.setOperator(gWTParams.getOperator()); return params; } /** * Copy the QueryResult data to GWTQueryResult * * @param queryResult The original QueryResult * @return The GWTQueryResult object with data values from de origina QueryResult */ public static GWTQueryResult copy(QueryResult queryResult) { GWTQueryResult gwtQueryResult = new GWTQueryResult(); if (queryResult.getDocument()!=null) { gwtQueryResult.setDocument(copy(queryResult.getDocument())); gwtQueryResult.getDocument().setAttachment(false); } else if (queryResult.getFolder()!=null) { gwtQueryResult.setFolder(copy(queryResult.getFolder())); } else if (queryResult.getMail()!=null) { gwtQueryResult.setMail(copy(queryResult.getMail())); } else if (queryResult.getAttachment()!=null) { gwtQueryResult.setAttachment(copy(queryResult.getAttachment())); gwtQueryResult.getAttachment().setAttachment(true); } gwtQueryResult.setScore(queryResult.getScore()); return gwtQueryResult; } /** * Copy the QueryParams data to GWTQueryParams data object * * @param GWTQueryParams The original QueryParams * @return The GWTQueryParams object with the data from de original QueryParams */ public static GWTQueryParams copy(QueryParams params) throws RepositoryException, IOException, PathNotFoundException, ParseException, DatabaseException { GWTQueryParams gWTParams = new GWTQueryParams(); gWTParams.setId(params.getId()); gWTParams.setQueryName(params.getQueryName()); gWTParams.setContent(params.getContent()); String tmp = ""; for (Iterator<String> itKwd = params.getKeywords().iterator(); itKwd.hasNext(); ) { tmp += itKwd.next() + " "; } gWTParams.setKeywords(tmp); gWTParams.setMimeType(params.getMimeType()); gWTParams.setName(params.getName()); gWTParams.setPath(params.getPath()); gWTParams.setAuthor(params.getAuthor()); gWTParams.setDashboard(params.isDashboard()); gWTParams.setDomain(params.getDomain()); gWTParams.setMailSubject(params.getMailSubject()); gWTParams.setMailFrom(params.getMailFrom()); gWTParams.setMailTo(params.getMailTo()); gWTParams.setOperator(params.getOperator()); Iterator<String> itCat = params.getCategories().iterator(); if (itCat.hasNext()) { gWTParams.setCategoryUuid(itCat.next()); } if (params.getCategories() != null && !params.getCategories().isEmpty()) { itCat = params.getCategories().iterator(); if (itCat.hasNext()) { gWTParams.setCategoryPath(OKMRepository.getInstance().getNodePath(null, itCat.next())); } } if (params.getLastModifiedFrom() != null && params.getLastModifiedTo() != null) { gWTParams.setLastModifiedFrom(params.getLastModifiedFrom().getTime()); gWTParams.setLastModifiedTo(params.getLastModifiedTo().getTime()); } // Sets group name for each property param Map<String, GWTPropertyParams> finalProperties = new HashMap<String, GWTPropertyParams> (); Map<String, String> properties = params.getProperties(); Collection<String> colKeys = properties.keySet(); for (Iterator<String> itKeys = colKeys.iterator(); itKeys.hasNext(); ){ String key = itKeys.next(); boolean found = false; // Obtain all group names Collection<PropertyGroup> colGroups = OKMPropertyGroup.getInstance().getAllGroups(null); Iterator<PropertyGroup> itGroup = colGroups.iterator(); while (itGroup.hasNext() && !found) { PropertyGroup group = itGroup.next(); // Obtain all metadata values Collection<FormElement> metaData = OKMPropertyGroup.getInstance().getPropertyGroupForm(null, group.getName()); for (Iterator<FormElement> it = metaData.iterator(); it.hasNext();) { FormElement formElement = it.next(); if (formElement.getName().equals(key)) { found = true; GWTPropertyParams gWTPropertyParams = new GWTPropertyParams(); gWTPropertyParams.setGrpName(group.getName()); gWTPropertyParams.setGrpLabel(group.getLabel()); gWTPropertyParams.setFormElement(GWTUtil.copy(formElement)); gWTPropertyParams.setValue(properties.get(key)); finalProperties.put(key,gWTPropertyParams); break; } } } } gWTParams.setProperties(finalProperties); return gWTParams; } /** * Copy the DashboardDocumentResult data to GWTDashboardDocumentResult * * @param dsDocumentResult The original DashboardDocumentResult * @return The GWTDashboardDocumentResult object with data values from the original * DashboardDocumentResult */ public static GWTDashboardDocumentResult copy(DashboardDocumentResult dsDocumentResult) { GWTDashboardDocumentResult gwtDashboardDocumentResult = new GWTDashboardDocumentResult(); gwtDashboardDocumentResult.setDocument(copy(dsDocumentResult.getDocument())); gwtDashboardDocumentResult.setVisited(dsDocumentResult.isVisited()); gwtDashboardDocumentResult.setDate(dsDocumentResult.getDate().getTime()); return gwtDashboardDocumentResult; } /** * Copy the DashboardFolderResult data to GWTDashboardFolderResult * * @param dsFolderResult The original DashboardFolderResult * @return The GWTDashboardFolderResult object with data values from the original * DashboardFolderResult */ public static GWTDashboardFolderResult copy(DashboardFolderResult dsFolderResult) { GWTDashboardFolderResult gwtDashboardFolderResult = new GWTDashboardFolderResult(); gwtDashboardFolderResult.setFolder(copy(dsFolderResult.getFolder())); gwtDashboardFolderResult.setVisited(dsFolderResult.isVisited()); gwtDashboardFolderResult.setDate(dsFolderResult.getDate().getTime()); return gwtDashboardFolderResult; } /** * Copy the DashboardMailResult data to GWTDashboardMailResult * * @param dsMailResult The original DashboardMailResult * @return The GWTDashboardMailResult object with data values from the original * DashboardMailResult */ public static GWTDashboardMailResult copy(DashboardMailResult dsmailResult) { GWTDashboardMailResult gwtDashboardMailResult = new GWTDashboardMailResult(); gwtDashboardMailResult.setMail(copy(dsmailResult.getMail())); gwtDashboardMailResult.setVisited(dsmailResult.isVisited()); gwtDashboardMailResult.setDate(dsmailResult.getDate().getTime()); return gwtDashboardMailResult; } /** * Copy to ProcessDefinition data to GWTProcessDefinition * * @param ProcessDefinition the original data * @return The GWTProcessDefinition object with data values from original ProcessDefinition */ public static GWTProcessDefinition copy(ProcessDefinition processDefinition) { GWTProcessDefinition gWTProcessDefinition = new GWTProcessDefinition(); gWTProcessDefinition.setId(processDefinition.getId()); gWTProcessDefinition.setName(processDefinition.getName()); gWTProcessDefinition.setVersion(processDefinition.getVersion()); gWTProcessDefinition.setDescription(processDefinition.getDescription()); return gWTProcessDefinition; } /** * Copy to TaskInstance data to GWTTaskInstance * * @param TaskInstance the original data * @return The GWTTaskInstance object with data values from original TaskInstance */ public static GWTTaskInstance copy(TaskInstance taskInstance) throws PathNotFoundException, RepositoryException, DatabaseException { GWTTaskInstance gWTTaskInstance = new GWTTaskInstance(); gWTTaskInstance.setActorId(taskInstance.getActorId()); gWTTaskInstance.setCreate(taskInstance.getCreate().getTime()); gWTTaskInstance.setId(taskInstance.getId()); gWTTaskInstance.setName(taskInstance.getName()); gWTTaskInstance.setProcessInstance(copy(taskInstance.getProcessInstance())); gWTTaskInstance.setDescription(taskInstance.getDescription()); if (taskInstance.getDueDate() != null) { gWTTaskInstance.setDueDate(taskInstance.getDueDate().getTime()); } if (taskInstance.getStart() != null) { gWTTaskInstance.setStart(taskInstance.getStart().getTime()); } gWTTaskInstance.setComments(copyComments(taskInstance.getComments())); return gWTTaskInstance; } /** * Copy to ProcessInstance data to GWTProcessInstance * * @param ProcessInstance the original data * @return The GWTProcessInstance object with data values from original ProcessInstance */ public static GWTProcessInstance copy(ProcessInstance processInstance) throws PathNotFoundException, RepositoryException, DatabaseException { GWTProcessInstance gWTProcessInstance = new GWTProcessInstance(); gWTProcessInstance.setEnded(processInstance.isEnded()); gWTProcessInstance.setId(processInstance.getId()); gWTProcessInstance.setProcessDefinition(copy(processInstance.getProcessDefinition())); gWTProcessInstance.setSuspended(processInstance.isSuspended()); Map<String, Object> variables = new HashMap<String, Object>(); for (Iterator<String> it = processInstance.getVariables().keySet().iterator(); it.hasNext();) { String key = it.next(); Object obj = processInstance.getVariables().get(key); if (obj instanceof FormElement ) { variables.put(key, copy((FormElement) obj)); } else { variables.put(key, obj); } } gWTProcessInstance.setVariables(variables); gWTProcessInstance.setVersion(processInstance.getVersion()); gWTProcessInstance.setStart(processInstance.getStart().getTime()); gWTProcessInstance.setKey(processInstance.getKey()); gWTProcessInstance.setRootToken(copy(processInstance.getRootToken())); processInstance.getRootToken(); return gWTProcessInstance; } /** * Copy to Token data to GWTToken * * @param FormElement the original data * @return The GWTToken object with data values from original Token */ public static GWTToken copy(Token token) throws PathNotFoundException, RepositoryException, DatabaseException { GWTToken gWTToken = new GWTToken(); Collection<GWTTransition> availableTransitions = new ArrayList<GWTTransition>(); for (Iterator<Transition> it = token.getAvailableTransitions().iterator(); it.hasNext();) { availableTransitions.add(copy(it.next())); } gWTToken.setAvailableTransitions(availableTransitions); Collection<GWTWorkflowComment> comments = new ArrayList<GWTWorkflowComment>(); for (Iterator<Comment> it = token.getComments().iterator(); it.hasNext();) { comments.add(copy(it.next())); } gWTToken.setComments(comments); if (token.getEnd() != null) { gWTToken.setEnd(token.getEnd().getTime()); } gWTToken.setId(token.getId()); gWTToken.setName(token.getName()); gWTToken.setNode(token.getNode()); if (token.getParent() != null) { gWTToken.setParent(copy(token.getParent())); } if (token.getProcessInstance() != null) { gWTToken.setProcessInstance(copy(token.getProcessInstance())); } gWTToken.setStart(token.getStart().getTime()); gWTToken.setSuspended(token.isSuspended()); return gWTToken; } /** * Copy to Token data to GWTTransition * * @param Transition the original data * @return The GWTTransition object with data values from original Transition */ public static GWTTransition copy(Transition transition) { GWTTransition gWTTransition = new GWTTransition(); gWTTransition.setFrom(transition.getFrom()); gWTTransition.setId(transition.getId()); gWTTransition.setName(transition.getName()); gWTTransition.setTo(transition.getTo()); return gWTTransition; } /** * Copy to Comment data to GWTWorkFlowComment * @param Transition the original data * @return The GWTWorkFlowComment object with data values from original Comment */ public static GWTWorkflowComment copy(Comment comment) { GWTWorkflowComment gWTComment = new GWTWorkflowComment(); gWTComment.setActorId(comment.getActorId()); gWTComment.setMessage(comment.getMessage()); gWTComment.setTime(comment.getTime().getTime()); return gWTComment; } /** * Copy to Validator data to GWTValidator * * @param Validator the original data * @return The GWTValidator object with data values from original Validator */ public static List<GWTValidator> copyValidators(List<Validator> validators) { List<GWTValidator> gwtValidatorsList = new ArrayList<GWTValidator>(); for (Validator validator : validators) { gwtValidatorsList.add(copy(validator)); } return gwtValidatorsList; } /** * copyNodes */ public static List<GWTNode> copyNodes(List<Node> nodes) { List<GWTNode> gwtNodesList = new ArrayList<GWTNode>(); for (Node node : nodes) { gwtNodesList.add(copy(node)); } return gwtNodesList; } /** * Copy to FormElement data to GWTFormElemen * * @param FormElement the original data * @return The GWTFormElement object with data values from original FormElement */ public static GWTFormElement copy(FormElement formElement) throws PathNotFoundException, RepositoryException, DatabaseException { if (formElement instanceof Button) { GWTButton gWTButton = new GWTButton(); gWTButton.setName(formElement.getName()); gWTButton.setLabel(formElement.getLabel()); gWTButton.setWidth(formElement.getWidth()); gWTButton.setHeight(formElement.getHeight()); Button button = (Button) formElement; gWTButton.setTransition(button.getTransition()); gWTButton.setConfirmation(button.getConfirmation()); return gWTButton; } else if (formElement instanceof Input) { GWTInput gWTInput = new GWTInput(); gWTInput.setName(formElement.getName()); gWTInput.setLabel(formElement.getLabel()); gWTInput.setWidth(formElement.getWidth()); gWTInput.setHeight(formElement.getHeight()); Input input = (Input) formElement; gWTInput.setReadonly(input.isReadonly()); gWTInput.setValue(input.getValue()); if (input.getType().equals(Input.TYPE_DATE)) { if (!input.getValue().equals("")) { Calendar date = ISO8601.parse(input.getValue()); if (date != null) { gWTInput.setDate(date.getTime()); } else { log.warn("Input '{}' value should be in ISO8601 format: {}", input.getName(), input.getValue()); } } } if (input.getType().equals(Input.TYPE_FOLDER) && !gWTInput.getValue().equals("")) { gWTInput.setFolder(copy(OKMFolder.getInstance().getProperties(null, ((Input) formElement).getValue()))); } gWTInput.setType(((Input) formElement).getType()); gWTInput.setValidators(copyValidators(input.getValidators())); gWTInput.setData(input.getData()); return gWTInput; } else if (formElement instanceof SuggestBox) { GWTSuggestBox gWTsuggestBox = new GWTSuggestBox(); gWTsuggestBox.setName(formElement.getName()); gWTsuggestBox.setLabel(formElement.getLabel()); gWTsuggestBox.setWidth(formElement.getWidth()); gWTsuggestBox.setHeight(formElement.getHeight()); SuggestBox suggestBox = (SuggestBox) formElement; gWTsuggestBox.setReadonly(suggestBox.isReadonly()); gWTsuggestBox.setValidators(copyValidators(suggestBox.getValidators())); gWTsuggestBox.setValue(suggestBox.getValue()); gWTsuggestBox.setDialogTitle(suggestBox.getDialogTitle()); gWTsuggestBox.setTable(suggestBox.getTable()); gWTsuggestBox.setFilterQuery(suggestBox.getFilterQuery()); gWTsuggestBox.setValueQuery(suggestBox.getValueQuery()); gWTsuggestBox.setFilterMinLen(suggestBox.getFilterMinLen()); gWTsuggestBox.setData(suggestBox.getData()); return gWTsuggestBox; } else if (formElement instanceof CheckBox) { GWTCheckBox gWTCheckbox = new GWTCheckBox(); gWTCheckbox.setName(formElement.getName()); gWTCheckbox.setLabel(formElement.getLabel()); CheckBox checkbox = (CheckBox) formElement; gWTCheckbox.setValue(checkbox.getValue()); gWTCheckbox.setReadonly(checkbox.isReadonly()); gWTCheckbox.setValidators(copyValidators(checkbox.getValidators())); gWTCheckbox.setData(checkbox.getData()); return gWTCheckbox; } else if (formElement instanceof Select) { GWTSelect gWTselect = new GWTSelect(); gWTselect.setName(formElement.getName()); gWTselect.setLabel(formElement.getLabel()); gWTselect.setWidth(formElement.getWidth()); gWTselect.setHeight(formElement.getHeight()); Select select = (Select) formElement; gWTselect.setType(select.getType()); gWTselect.setReadonly(select.isReadonly()); List<GWTOption> options = new ArrayList<GWTOption>(); for (Iterator<Option> it = select.getOptions().iterator(); it.hasNext();) { options.add(copy(it.next())); } gWTselect.setOptions(options); gWTselect.setValidators(copyValidators(select.getValidators())); gWTselect.setData(select.getData()); return gWTselect; } else if (formElement instanceof TextArea) { GWTTextArea gWTTextArea= new GWTTextArea(); gWTTextArea.setName(formElement.getName()); gWTTextArea.setLabel(formElement.getLabel()); gWTTextArea.setWidth(formElement.getWidth()); gWTTextArea.setHeight(formElement.getHeight()); TextArea textArea = (TextArea) formElement; gWTTextArea.setValue(textArea.getValue()); gWTTextArea.setReadonly(textArea.isReadonly()); gWTTextArea.setValidators(copyValidators(textArea.getValidators())); gWTTextArea.setData(textArea.getData()); return gWTTextArea; } else if (formElement instanceof Upload) { GWTUpload gWTUpload= new GWTUpload(); gWTUpload.setName(formElement.getName()); gWTUpload.setLabel(formElement.getLabel()); gWTUpload.setWidth(formElement.getWidth()); gWTUpload.setHeight(formElement.getHeight()); Upload upload = (Upload) formElement; gWTUpload.setFolderPath(upload.getFolderPath()); gWTUpload.setFolderUuid(upload.getFolderUuid()); gWTUpload.setDocumentName(upload.getDocumentName()); gWTUpload.setDocumentUuid(upload.getDocumentUuid()); gWTUpload.setType(upload.getType()); gWTUpload.setData(upload.getData()); gWTUpload.setValidators(copyValidators(upload.getValidators())); return gWTUpload; } else if (formElement instanceof Text) { GWTText gWTtext = new GWTText(); gWTtext.setName(formElement.getName()); gWTtext.setLabel(formElement.getLabel()); gWTtext.setHeight(formElement.getHeight()); gWTtext.setWidth(formElement.getWidth()); Text text = (Text) formElement; gWTtext.setData(text.getData()); return gWTtext; } else if (formElement instanceof Separator) { GWTSeparator separator = new GWTSeparator(); separator.setName(formElement.getName()); separator.setLabel(formElement.getLabel()); separator.setHeight(formElement.getHeight()); separator.setWidth(formElement.getWidth()); return separator; } else if (formElement instanceof Download) { GWTDownload gWTdownload = new GWTDownload(); gWTdownload.setName(formElement.getName()); gWTdownload.setLabel(formElement.getLabel()); gWTdownload.setHeight(formElement.getHeight()); gWTdownload.setWidth(formElement.getWidth()); Download download = (Download) formElement; gWTdownload.setData(download.getData()); gWTdownload.setValidators(copyValidators(download.getValidators())); gWTdownload.setNodes(copyNodes(download.getNodes())); return gWTdownload; } else if (formElement instanceof Print) { GWTPrint gWTprint = new GWTPrint(); gWTprint.setName(formElement.getName()); gWTprint.setLabel(formElement.getLabel()); gWTprint.setHeight(formElement.getHeight()); gWTprint.setWidth(formElement.getWidth()); Print download = (Print) formElement; gWTprint.setData(download.getData()); gWTprint.setValidators(copyValidators(download.getValidators())); gWTprint.setNodes(copyNodes(download.getNodes())); return gWTprint; } else { return new GWTFormElement(); } } /** * Copy to GWTFormElement data to FormElement * * @param GWTFormElement the original data * @return The FormElement object with data values from original GWTFormElement */ public static FormElement copy(GWTFormElement formElement) { if (formElement instanceof GWTButton) { Button button = new Button(); button.setName(formElement.getName()); GWTButton gWTButton = ((GWTButton) formElement); button.setTransition(gWTButton.getTransition()); button.setConfirmation(gWTButton.getConfirmation()); return button; } else if (formElement instanceof GWTInput) { Input input = new Input(); input.setName(formElement.getName()); GWTInput gWTInput = ((GWTInput) formElement); input.setReadonly(gWTInput.isReadonly()); if (gWTInput.getType().equals(GWTInput.TYPE_TEXT) || gWTInput.getType().equals(GWTInput.TYPE_LINK) || gWTInput.getType().equals(GWTInput.TYPE_FOLDER) ) { input.setValue(gWTInput.getValue()); } else if (gWTInput.getType().equals(GWTInput.TYPE_DATE)) { if (gWTInput.getDate() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(((GWTInput) formElement).getDate()); input.setValue(ISO8601.format(cal)); } } input.setType(gWTInput.getType()); input.setData(gWTInput.getData()); return input; } else if(formElement instanceof GWTSuggestBox) { SuggestBox suggestBox = new SuggestBox(); suggestBox.setName(formElement.getName()); GWTSuggestBox gWTSuggestBox = ((GWTSuggestBox)formElement); suggestBox.setReadonly(gWTSuggestBox.isReadonly()); suggestBox.setValue(gWTSuggestBox.getValue()); suggestBox.setFilterQuery(gWTSuggestBox.getFilterQuery()); suggestBox.setValueQuery(gWTSuggestBox.getValueQuery()); suggestBox.setFilterMinLen(gWTSuggestBox.getFilterMinLen()); suggestBox.setData(gWTSuggestBox.getData()); return suggestBox; } else if (formElement instanceof GWTCheckBox) { CheckBox checkbox = new CheckBox(); checkbox.setLabel(formElement.getLabel()); checkbox.setName(formElement.getName()); GWTCheckBox gWTCheckBox = ((GWTCheckBox) formElement); checkbox.setValue(gWTCheckBox.getValue()); checkbox.setReadonly(gWTCheckBox.isReadonly()); checkbox.setData(gWTCheckBox.getData()); return checkbox; } else if (formElement instanceof GWTSelect) { Select select = new Select(); select.setName(formElement.getName()); GWTSelect gWTSelect = ((GWTSelect) formElement); select.setType(gWTSelect.getType()); select.setReadonly(gWTSelect.isReadonly()); List<Option> options = new ArrayList<Option>(); for (GWTOption option : gWTSelect.getOptions()) { options.add(copy(option)); if (option.isSelected()) { if (Select.TYPE_SIMPLE.equals(select.getType())) { select.setValue(option.getValue()); } else { if ("".equals(select.getValue())) { select.setValue(option.getValue()); } else { select.setValue(select.getValue().concat(",").concat(option.getValue())); } } } } select.setOptions(options); select.setData(gWTSelect.getData()); return select; } else if (formElement instanceof GWTTextArea) { TextArea textArea= new TextArea(); textArea.setName(formElement.getName()); GWTTextArea gWTTextArea = ((GWTTextArea) formElement); textArea.setValue(gWTTextArea.getValue()); textArea.setReadonly(gWTTextArea.isReadonly()); textArea.setData(gWTTextArea.getData()); return textArea; } else if (formElement instanceof GWTUpload) { Upload upload= new Upload(); upload.setName(formElement.getName()); GWTUpload gWTUpload = ((GWTUpload) formElement); upload.setDocumentName(gWTUpload.getDocumentName()); upload.setDocumentUuid(gWTUpload.getDocumentUuid()); upload.setFolderPath(gWTUpload.getFolderPath()); upload.setFolderUuid(gWTUpload.getFolderUuid()); upload.setType(gWTUpload.getType()); upload.setData(gWTUpload.getData()); return upload; } else if (formElement instanceof GWTText) { Text text = new Text(); GWTText gWTText = (GWTText) formElement; text.setName(gWTText.getName()); text.setLabel(gWTText.getLabel()); text.setHeight(gWTText.getHeight()); text.setWidth(gWTText.getWidth()); text.setData(gWTText.getData()); return text; } else if (formElement instanceof GWTSeparator) { Separator separator = new Separator(); GWTSeparator gWTSeparator = (GWTSeparator) formElement; separator.setName(gWTSeparator.getName()); separator.setLabel(gWTSeparator.getLabel()); separator.setHeight(gWTSeparator.getHeight()); separator.setWidth(gWTSeparator.getWidth()); return separator; } else if (formElement instanceof GWTDownload) { Download download = new Download(); GWTDownload gWTDownload = (GWTDownload) formElement; download.setName(gWTDownload.getName()); download.setLabel(gWTDownload.getLabel()); download.setHeight(gWTDownload.getHeight()); download.setWidth(gWTDownload.getWidth()); download.setData(gWTDownload.getData()); List<Node> nodes = new ArrayList<Node>(); for (GWTNode gWTNode : gWTDownload.getNodes()) { nodes.add(copy(gWTNode)); } return download; } else if (formElement instanceof GWTPrint) { Print print = new Print(); GWTPrint gWTprint = (GWTPrint) formElement; print.setName(gWTprint.getName()); print.setLabel(gWTprint.getLabel()); print.setHeight(gWTprint.getHeight()); print.setWidth(gWTprint.getWidth()); print.setData(gWTprint.getData()); List<Node> nodes = new ArrayList<Node>(); for (GWTNode gWTNode : gWTprint.getNodes()) { nodes.add(copy(gWTNode)); } return print; } else { return new FormElement(); } } /** * getFormElementValue */ public static Object getFormElementValue(GWTFormElement formElement) throws DatabaseException { if (formElement instanceof GWTButton) { return ((GWTButton) formElement).getLabel(); } else if (formElement instanceof GWTInput) { GWTInput input = (GWTInput) formElement; if (GWTInput.TYPE_DATE.equals(input.getType())) { return input.getDate(); } else { return input.getValue(); } } else if (formElement instanceof GWTSuggestBox) { GWTSuggestBox suggestBox = (GWTSuggestBox) formElement; // The ' character must be replaced to \" to be correctly parsed // and after it must change all " characters to ' String formatedQuery = MessageFormat.format(suggestBox.getValueQuery().replaceAll("'", "\\\""), suggestBox.getValue()).replaceAll("\"", "'"); List<KeyValue> keyValues = KeyValueDAO.getKeyValues(Arrays.asList(suggestBox.getTable()), formatedQuery); if (!keyValues.isEmpty()) { return keyValues.get(0).getValue(); } else { return ""; } } else if (formElement instanceof GWTCheckBox) { return ((GWTCheckBox) formElement).getValue()?"true":"false"; } else if (formElement instanceof GWTSelect) { String value = ""; for (Iterator<GWTOption> it = ((GWTSelect) formElement).getOptions().iterator(); it.hasNext();) { GWTOption option = it.next(); if (option.isSelected()) { value += option.getLabel() + " "; } } return value; } else if (formElement instanceof GWTTextArea) { return ((GWTTextArea) formElement).getValue(); } else if (formElement instanceof GWTUpload) { return ((GWTButton) formElement).getLabel(); } else if (formElement instanceof GWTText) { return ((GWTText) formElement).getLabel(); } else if (formElement instanceof GWTSeparator) { return ((GWTSeparator) formElement).getLabel(); } else if (formElement instanceof GWTDownload) { GWTDownload download = ((GWTDownload) formElement); String value = ""; for (GWTNode node : download.getNodes()) { if (!value.equals("")) { value += ","; } if (!node.getUuid().equals("")) { value += node.getUuid(); } else { value += node.getPath(); } } return value; } else if (formElement instanceof GWTPrint) { GWTPrint print = ((GWTPrint) formElement); String value = ""; for (GWTNode node : print.getNodes()) { if (!value.equals("")) { value += ","; } if (!node.getUuid().equals("")) { value += node.getUuid(); } else { value += node.getPath(); } } return value; } return ""; } /** * Copy to Validator data to GWTValidator * * @param Validator the original data * @return The GWTValidator object with data values from original Validator */ public static GWTValidator copy(Validator validator) { GWTValidator gWTValidator = new GWTValidator(); gWTValidator.setParameter(validator.getParameter()); gWTValidator.setType(validator.getType()); return gWTValidator; } /** * Copy to Node data to GWTNode * * @param Node the original data * @return The GWTNode object with data values from original Node */ public static GWTNode copy(Node node) { GWTNode gWTNode = new GWTNode(); gWTNode.setLabel(node.getLabel()); gWTNode.setPath(node.getPath()); gWTNode.setUuid(node.getUuid()); return gWTNode; } /** * Copy to GWTNode data to Node * * @param GWTNode the original data * @return The Node object with data values from original GWTNode */ public static Node copy(GWTNode gWTNode) { Node node = new Node(); node.setLabel(gWTNode.getLabel()); node.setPath(gWTNode.getPath()); node.setUuid(gWTNode.getUuid()); return node; } /** * Copy to GWTOption data to Option * * @param GWTOption the original data * @return The Option object with data values from original GWTOption */ public static Option copy(GWTOption gWTOption) { Option option = new Option(); option.setLabel(gWTOption.getLabel()); option.setValue(gWTOption.getValue()); option.setSelected(gWTOption.isSelected()); return option; } /** * Copy to Option data to GWTOption * * @param Option the original data * @return The GWTOption object with data values from original Option */ public static GWTOption copy(Option option) { GWTOption gWTOption = new GWTOption(); gWTOption.setLabel(option.getLabel()); gWTOption.setValue(option.getValue()); gWTOption.setSelected(option.isSelected()); return gWTOption; } /** * Copy to Comment data to GWTComment * * @param Comment the original data * @return The GWTTaskInstanceComment object with data values from original TaskInstanceComment */ public static List<GWTComment> copyComments(List<Comment> list) { List<GWTComment> al = new ArrayList<GWTComment>(); GWTComment gWTComment; for (Iterator<Comment> it = list.iterator(); it.hasNext();) { Comment comment = it.next(); gWTComment = new GWTComment(); gWTComment.setActorId(comment.getActorId()); gWTComment.setMessage(comment.getMessage()); gWTComment.setTime(comment.getTime().getTime()); al.add(gWTComment); } return al; } /** * Copy Note data to GWTNote * * @param Note the original data * @return The GWTNote object with data values from original Note */ public static List<GWTNote> copy(List<Note> commentList) { List<GWTNote> gWTCommentList = new ArrayList<GWTNote>(); for (Iterator<Note> it = commentList.iterator(); it.hasNext();) { gWTCommentList.add(copy(it.next())); } return gWTCommentList; } /** * Copy Note data to GWTNote * * @param Note the original data * @return The GWTNote object with data values from original Note */ public static GWTNote copy(Note note) { GWTNote gWTNote = new GWTNote(); gWTNote.setDate(note.getDate().getTime()); gWTNote.setText(note.getText()); gWTNote.setUser(note.getUser()); gWTNote.setPath(note.getPath()); return gWTNote; } /** * Copy the Mail data to GWTMail data. * * @param mail The original Mail object. * @return A GWTMail object with the data from * the original Mail. */ public static GWTMail copy(Mail mail) { log.debug("copy({})", mail); GWTMail gWTMail = new GWTMail(); List<GWTDocument> attachList = new ArrayList<GWTDocument>(); for (Iterator<Document> it = mail.getAttachments().iterator(); it.hasNext();) { attachList.add(copy(it.next())); } gWTMail.setAttachments(attachList); gWTMail.setBcc(mail.getBcc()); gWTMail.setCc(mail.getCc()); gWTMail.setContent(mail.getContent()); gWTMail.setFrom(mail.getFrom()); gWTMail.setPath(mail.getPath()); gWTMail.setPermissions(mail.getPermissions()); gWTMail.setReceivedDate(mail.getReceivedDate().getTime()); gWTMail.setReply(mail.getReply()); gWTMail.setSentDate(mail.getSentDate().getTime()); gWTMail.setSize(mail.getSize()); gWTMail.setSubject(mail.getSubject()); gWTMail.setTo(mail.getTo()); gWTMail.setUuid(mail.getUuid()); gWTMail.setParent(GWTUtil.getParent(mail.getPath())); gWTMail.setMimeType(mail.getMimeType()); log.debug("copy: {}", gWTMail); return gWTMail; } /** * Copy the PropertyGroup data to GWTPropertyGroup data. * * @param doc The original PropertyGroup object. * @return A GWTPropertyGroup object with the data from * the original PropertyGroup. */ public static GWTPropertyGroup copy(PropertyGroup property) { GWTPropertyGroup gWTPropertyGroup = new GWTPropertyGroup(); gWTPropertyGroup.setLabel(property.getLabel()); gWTPropertyGroup.setName(property.getName()); gWTPropertyGroup.setVisible(property.isVisible()); gWTPropertyGroup.setReadonly(property.isReadonly()); return gWTPropertyGroup; } /** * Copy the UserConfig data to GWTUserConfig data. * * @param doc The original UserConfig object. * @return A GWTUserConfig object with the data from * the original UserConfig. */ public static GWTUserConfig copy(UserConfig userCopy) { GWTUserConfig gWTUserConfig = new GWTUserConfig(); gWTUserConfig.setHomePath(userCopy.getHomePath()); gWTUserConfig.setHomeType(userCopy.getHomeType()); gWTUserConfig.setHomeUuid(userCopy.getHomeUuid()); gWTUserConfig.setUser(userCopy.getUser()); return gWTUserConfig; } /** * Copy the StaplingGroup data to GWTStapleGroup data. * * @param doc The original StaplingGroup object. * @return A GWTStaplingGroup object with the data from * the original StaplingGroup. */ public static GWTStapleGroup copy(StapleGroup sg) throws RepositoryException, DatabaseException, PathNotFoundException { GWTStapleGroup gsg = new GWTStapleGroup(); gsg.setId(sg.getId()); gsg.setUser(sg.getUser()); for (Staple st: sg.getStaples()) { GWTStaple gst = new GWTStaple(); gst.setId(st.getId()); gst.setType(st.getType()); try { // Getting document / folder / mail properties if (st.getType().equals(Staple.STAPLE_DOCUMENT)) { String path = OKMDocument.getInstance().getPath(null, st.getUuid()); gst.setDoc(copy(OKMDocument.getInstance().getProperties(null, path))); } else if (st.getType().equals(Staple.STAPLE_FOLDER)) { String path = OKMFolder.getInstance().getPath(null, st.getUuid()); gst.setFolder(copy(OKMFolder.getInstance().getProperties(null, path))); } else if (st.getType().equals(Staple.STAPLE_MAIL)) { String path = OKMMail.getInstance().getPath(null, st.getUuid()); gst.setMail(GWTUtil.copy(OKMMail.getInstance().getProperties(null, path))); } gsg.getStaples().add(gst); } catch (AccessDeniedException e){ // Silent exception, some users have not accessing to some documents, folders or mails } } return gsg; } /** * Copy Language to GWTLanguage */ public static GWTLanguage copy(Language language) { GWTLanguage gWTlang = new GWTLanguage(); gWTlang.setId(language.getId()); gWTlang.setName(language.getName()); return gWTlang; } /** * Copy GWTProposedSubscriptionReceived to GWTProposedSubscription */ public static GWTProposedSubscriptionReceived copy(ProposedSubscriptionReceived ps) { GWTProposedSubscriptionReceived gWTProposedSubscription = new GWTProposedSubscriptionReceived(); gWTProposedSubscription.setId(ps.getId()); gWTProposedSubscription.setFrom(ps.getFrom()); gWTProposedSubscription.setTo(ps.getTo()); gWTProposedSubscription.setUuid(ps.getUuid()); gWTProposedSubscription.setPath(ps.getPath()); gWTProposedSubscription.setType(ps.getType()); gWTProposedSubscription.setComment(ps.getComment()); gWTProposedSubscription.setAccepted(ps.isAccepted()); gWTProposedSubscription.setSentDate(ps.getSentDate().getTime()); if (ps.getSeenDate()!=null) { gWTProposedSubscription.setSeenDate(ps.getSeenDate().getTime()); } return gWTProposedSubscription; } /** * Copy ProposedSubscriptionSent to GWTProposedSubscriptionSent */ public static GWTProposedSubscriptionSent copy(ProposedSubscriptionSent ps) { GWTProposedSubscriptionSent gWTProposedSubscription = new GWTProposedSubscriptionSent(); gWTProposedSubscription.setId(ps.getId()); gWTProposedSubscription.setFrom(ps.getFrom()); gWTProposedSubscription.setTo(ps.getTo()); gWTProposedSubscription.setUuid(ps.getUuid()); gWTProposedSubscription.setPath(ps.getPath()); gWTProposedSubscription.setType(ps.getType()); gWTProposedSubscription.setComment(ps.getComment()); gWTProposedSubscription.setSentDate(ps.getSentDate().getTime()); return gWTProposedSubscription; } /** * Copy ProposedQuery to GWTProposedQuery */ public static GWTProposedQueryReceived copy(ProposedQueryReceived pq, QueryParams params) throws RepositoryException, IOException, PathNotFoundException, ParseException, DatabaseException { GWTProposedQueryReceived gWTProposedQuery = new GWTProposedQueryReceived(); gWTProposedQuery.setAccepted(pq.isAccepted()); gWTProposedQuery.setComment(pq.getComment()); gWTProposedQuery.setFrom(pq.getFrom()); gWTProposedQuery.setTo(pq.getTo()); gWTProposedQuery.setUser(pq.getUser()); gWTProposedQuery.setId(pq.getId()); gWTProposedQuery.setSentDate(pq.getSentDate().getTime()); if (pq.getSeenDate() != null) { gWTProposedQuery.setSeenDate(pq.getSeenDate().getTime()); } gWTProposedQuery.setParams(copy(params)); return gWTProposedQuery; } /** * Copy ProposedQuery to GWTProposedQuery */ public static GWTProposedQuerySent copy(ProposedQuerySent pq, QueryParams params) throws RepositoryException, IOException, PathNotFoundException, ParseException, DatabaseException { GWTProposedQuerySent gWTProposedQuery = new GWTProposedQuerySent(); gWTProposedQuery.setComment(pq.getComment()); gWTProposedQuery.setFrom(pq.getFrom()); gWTProposedQuery.setTo(pq.getTo()); gWTProposedQuery.setUser(pq.getUser()); gWTProposedQuery.setId(pq.getId()); gWTProposedQuery.setSentDate(pq.getSentDate().getTime()); gWTProposedQuery.setParams(copy(params)); return gWTProposedQuery; } /** * Copy MessageSent to GWTMessageSent */ public static GWTTextMessageSent copy(MessageSent ms) { GWTTextMessageSent gWTMessageSent = new GWTTextMessageSent(); gWTMessageSent.setContent(ms.getContent()); gWTMessageSent.setFrom(ms.getFrom()); gWTMessageSent.setUser(ms.getUser()); gWTMessageSent.setId(ms.getId()); gWTMessageSent.setSentDate(ms.getSentDate().getTime()); gWTMessageSent.setSubject(ms.getSubject()); gWTMessageSent.setTo(ms.getTo()); return gWTMessageSent; } /** * Copy MessageReceived to GWTMessageReceived */ public static GWTMessageReceived copy(MessageReceived mr) { GWTMessageReceived gWTMessageReceived = new GWTMessageReceived(); gWTMessageReceived.setContent(mr.getContent()); gWTMessageReceived.setFrom(mr.getFrom()); gWTMessageReceived.setId(mr.getId()); if (mr.getSeenDate() != null) { gWTMessageReceived.setSeenDate(mr.getSeenDate().getTime()); } gWTMessageReceived.setSentDate(mr.getSentDate().getTime()); gWTMessageReceived.setSubject(mr.getSubject()); gWTMessageReceived.setTo(mr.getTo()); gWTMessageReceived.setUser(mr.getUser()); return gWTMessageReceived; } /** * Copy StampText to GWTStamp */ public static GWTStamp copy(StampText st) { GWTStamp gst = new GWTStamp(); gst.setId(st.getId()); gst.setName(st.getName()); gst.setType(GWTStamp.STAMP_TEXT); return gst; } /** * Copy StampText to StampImage */ public static GWTStamp copy(StampImage st) { GWTStamp gst = new GWTStamp(); gst.setId(st.getId()); gst.setName(st.getName()); gst.setType(GWTStamp.STAMP_IMAGE); return gst; } /** * Copy GWTContact to Contact */ public static Contact copy(GWTContact gWTContact) { Contact contact = new Contact(); contact.setAddress(gWTContact.getAddress()); contact.setCity(gWTContact.getCity()); contact.setCountry(gWTContact.getCountry()); contact.setFax(gWTContact.getFax()); contact.setId(gWTContact.getId()); contact.setMail(gWTContact.getMail()); contact.setMobile(gWTContact.getMobile()); contact.setName(gWTContact.getName()); contact.setNotes(gWTContact.getNotes()); contact.setPostalCode(gWTContact.getPostalCode()); contact.setPhone(gWTContact.getPhone()); contact.setProvince(gWTContact.getProvince()); contact.setWeb(gWTContact.getWeb()); contact.setExternalId(gWTContact.getExternalId()); contact.setOrigin(gWTContact.getOrigin()); return contact; } /** * Copy Contact to GWTContact */ public static GWTContact copy(Contact contact, String uuid) { GWTContact gwtContact = new GWTContact(); gwtContact.setAddress(contact.getAddress()); gwtContact.setCity(contact.getCity()); gwtContact.setCountry(contact.getCountry()); gwtContact.setFax(contact.getFax()); gwtContact.setId(contact.getId()); gwtContact.setMail(contact.getMail()); gwtContact.setMobile(contact.getMobile()); gwtContact.setName(contact.getName()); gwtContact.setNotes(contact.getNotes()); gwtContact.setPostalCode(contact.getPostalCode()); gwtContact.setPhone(contact.getPhone()); gwtContact.setProvince(contact.getProvince()); gwtContact.setWeb(contact.getWeb()); return gwtContact; } /** * Copy Activity to GWTActivity */ public static GWTActivity copy(Activity activity) { GWTActivity gWTActivity = new GWTActivity(); gWTActivity.setAction(activity.getAction()); gWTActivity.setDate(activity.getDate().getTime()); gWTActivity.setId(activity.getId()); gWTActivity.setItem(activity.getItem()); gWTActivity.setParams(activity.getParams()); gWTActivity.setUser(activity.getUser()); return gWTActivity; } /** * Copy Forum to GWTForum */ public static GWTForum copy(Forum forum) { GWTForum f = new GWTForum(); f.setActive(forum.isActive()); f.setDate(forum.getDate().getTime()); f.setDescription(forum.getDescription()); f.setId(forum.getId()); f.setLastPostDate(forum.getLastPostDate().getTime()); f.setLastPostUser(forum.getLastPostUser()); f.setName(forum.getName()); f.setNumPosts(forum.getNumPosts()); f.setNumTopics(forum.getNumTopics()); for (ForumTopic topic : forum.getTopics()) { f.getTopics().add(copy(topic)); } return f; } /** * Copy ForumTopic to GWTForumTopic */ public static GWTForumTopic copy(ForumTopic topic) { GWTForumTopic ft = new GWTForumTopic(); ft.setDate(topic.getDate().getTime()); ft.setId(topic.getId()); ft.setReplies(topic.getReplies()); ft.setLastPostDate(topic.getLastPostDate().getTime()); ft.setLastPostUser(topic.getLastPostUser()); ft.setTitle(topic.getTitle()); ft.setUser(topic.getUser()); ft.setUuid(topic.getUuid()); ft.setViews(topic.getViews()); for (Iterator<ForumPost> it = topic.getPosts().iterator(); it.hasNext();) { ft.getPosts().add(copy(it.next())); } return ft; } /** * Copy ForumPost to GWTForumPost */ public static GWTForumPost copy(ForumPost post) { GWTForumPost fp = new GWTForumPost(); fp.setDate(post.getDate().getTime()); fp.setId(post.getId()); fp.setMessage(post.getMessage()); fp.setSubject(post.getSubject()); fp.setUser(post.getUser()); return fp; } /** * Copy GWTForum to Forum */ public static Forum copy(GWTForum forum) { Forum f = new Forum(); f.setActive(forum.isActive()); Calendar cal = Calendar.getInstance(); cal.setTime(forum.getDate()); f.setDate(cal); f.setDescription(forum.getDescription()); f.setId(forum.getId()); Calendar cal2 = Calendar.getInstance(); cal2.setTime(forum.getLastPostDate()); f.setLastPostDate(cal2); f.setLastPostUser(forum.getLastPostUser()); f.setName(forum.getName()); f.setNumPosts(forum.getNumPosts()); f.setNumTopics(forum.getNumTopics()); for (GWTForumTopic topic : forum.getTopics()) { f.getTopics().add(copy(topic)); } return f; } /** * Copy GWTForumTopic to ForumTopic */ public static ForumTopic copy(GWTForumTopic topic) { ForumTopic ft = new ForumTopic(); Calendar date = Calendar.getInstance(); date.setTime(topic.getDate()); ft.setDate(date); ft.setId(topic.getId()); ft.setReplies(topic.getReplies()); Calendar lastDate = Calendar.getInstance(); lastDate.setTime(topic.getLastPostDate()); ft.setLastPostDate(lastDate); ft.setLastPostUser(topic.getLastPostUser()); ft.setTitle(topic.getTitle()); ft.setUser(topic.getUser()); ft.setUuid(topic.getUuid()); ft.setViews(topic.getViews()); for (Iterator<GWTForumPost> it = topic.getPosts().iterator(); it.hasNext();) { ft.getPosts().add(copy(it.next())); } return ft; } /** * Copy ForumPost to GWTForumPost */ public static ForumPost copy(GWTForumPost post) { ForumPost fp = new ForumPost(); Calendar date = Calendar.getInstance(); date.setTime(post.getDate()); fp.setDate(date); fp.setId(post.getId()); fp.setMessage(post.getMessage()); fp.setSubject(post.getSubject()); fp.setUser(post.getUser()); return fp; } /** * Copy KeyValue to GWTKeyValue */ public static GWTKeyValue copy(KeyValue keyValue) { GWTKeyValue gWTKeyValue = new GWTKeyValue(); gWTKeyValue.setKey(keyValue.getKey()); gWTKeyValue.setValue(keyValue.getValue()); return gWTKeyValue; } /** * Copy Report to GWTReport */ public static GWTReport copy(Report report, List<FormElement> formElements) throws PathNotFoundException, RepositoryException, DatabaseException { GWTReport gWTReport = new GWTReport(); gWTReport.setActive(report.isActive()); gWTReport.setFileContent(report.getFileContent()); gWTReport.setFileMime(report.getFileMime()); gWTReport.setFileName(report.getFileName()); gWTReport.setId(report.getId()); gWTReport.setName(report.getName()); List<GWTFormElement> gWTFormElemets = new ArrayList<GWTFormElement>(); for (FormElement formElement : formElements) { gWTFormElemets.add(copy(formElement)); } gWTReport.setFormElements(gWTFormElemets); return gWTReport; } }