/* * Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Copyright (c) WSO2 Inc. (http://www.wso2.com) All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wso2.carbon.registry.ws.api.utils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.registry.core.Association; import org.wso2.carbon.registry.core.Collection; import org.wso2.carbon.registry.core.CollectionImpl; import org.wso2.carbon.registry.core.Comment; import org.wso2.carbon.registry.core.LogEntry; import org.wso2.carbon.registry.core.Resource; import org.wso2.carbon.registry.core.ResourceImpl; import org.wso2.carbon.registry.core.Tag; import org.wso2.carbon.registry.core.TaggedResourcePath; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.ws.api.WSAssociation; import org.wso2.carbon.registry.ws.api.WSCollection; import org.wso2.carbon.registry.ws.api.WSComment; import org.wso2.carbon.registry.ws.api.WSLogEntry; import org.wso2.carbon.registry.ws.api.WSMap; import org.wso2.carbon.registry.ws.api.WSProperty; import org.wso2.carbon.registry.ws.api.WSResource; import org.wso2.carbon.registry.ws.api.WSTag; import org.wso2.carbon.registry.ws.api.WSTaggedResourcePath; import javax.activation.DataHandler; import javax.activation.FileDataSource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; public class CommonUtil { private static final Log log = LogFactory.getLog(CommonUtil.class); public static Map createMap(String[] key,String[] value)throws RegistryException{ Map map = new HashMap(); try{ if(key.length == value.length){ for(int i=0;i<value.length;i++){ map.put(key[i],value[i]); } return map; } }catch(Exception e){ throw new RegistryException("Wrong key value pair"); } return null; } public static Resource transformWSResourcetoResource(WSResource wsResource, Object content)throws RegistryException{ ResourceImpl resource = null; if (wsResource.isCollection()) { resource = new CollectionImpl(); } else { resource = new ResourceImpl(); resource.setContent(content); } if (wsResource.getDescription() != null) resource.setDescription(wsResource.getDescription()); if (wsResource.getMediaType() != null) resource.setMediaType(wsResource.getMediaType()); if (wsResource.getProperties() != null) resource.setProperties(getPropertiesForResource(wsResource.getProperties(), resource.getProperties())); if (wsResource.getAuthorUserName() != null) resource.setAuthorUserName(wsResource.getAuthorUserName()); resource.setCreatedTime(new Date(wsResource.getCreatedTime())); if (wsResource.getId() != null) resource.setId(wsResource.getId()); resource.setLastModified(new Date(wsResource.getLastModified())); if (wsResource.getLastUpdaterUserName() != null) resource.setLastUpdaterUserName(wsResource.getLastUpdaterUserName()); if (wsResource.getParentPath() != null) resource.setParentPath(wsResource.getParentPath()); if (wsResource.getPath() != null) resource.setPath(wsResource.getPath()); if (wsResource.getUUID() != null) resource.setUUID(wsResource.getUUID()); return resource; } public static Collection transformWSCollectiontoCollection(WSResource wsCollection, Object content) throws RegistryException { Collection collection = (Collection) transformWSResourcetoResource(wsCollection, content); try { if (content != null) { InputStream in = new ByteArrayInputStream((byte[]) content); ObjectInputStream ois = new ObjectInputStream(in); Object object = ois.readObject(); if (object instanceof String[]) { String[] strArray = (String[]) object; collection.setContent(strArray); } } } catch (IOException e) { throw new RegistryException("Error forming String array from dataHandler for Collection", e); } catch (ClassNotFoundException e) { throw new RegistryException("Error forming String array from dataHandler for Collection", e); } return collection; } public static WSCollection transformCollectiontoWSCollection(Collection collection, DataHandler dataHandler) { WSCollection wsCollection = (WSCollection) transformResourceToWSResource(collection, dataHandler); wsCollection.setCollection(true); // wsCollection.setChildCount(collection.getChildCount()); return wsCollection; } public static WSResource transformResourceToWSResource(Resource resource, DataHandler dataHandler) { WSResource wsResource = null; if (resource instanceof Collection) { wsResource = new WSCollection(); } else { wsResource = new WSResource(); } wsResource.setContentFile(dataHandler); wsResource.setAuthorUserName(resource.getAuthorUserName()); if (resource.getCreatedTime() != null) wsResource.setCreatedTime(resource.getCreatedTime().getTime()); // wsResource.setDbBasedContentID(resource) wsResource.setDescription(resource.getDescription()); wsResource.setId(resource.getId()); if (resource.getLastModified() != null) wsResource.setLastModified(resource.getLastModified().getTime()); wsResource.setLastUpdaterUserName(resource.getLastUpdaterUserName()); if (resource instanceof ResourceImpl) { wsResource.setMatchingSnapshotID(((ResourceImpl)resource).getMatchingSnapshotID()); } wsResource.setMediaType(resource.getMediaType()); // wsResource.setName(resource.) wsResource.setParentPath(resource.getParentPath()); wsResource.setPath(resource.getPath()); // wsResource.setPathID(); wsResource.setPermanentPath(resource.getPermanentPath()); if (resource.getProperties() != null) wsResource.setProperties(getPropertiesForWSResource(resource.getProperties())); wsResource.setState(resource.getState()); wsResource.setUUID(resource.getUUID()); // resource.get return wsResource; } public static byte[] makeBytesFromDataHandler(WSResource wsResource) throws IOException{ DataHandler dataHandler = wsResource.getContentFile(); if (dataHandler == null) return null; ByteArrayOutputStream output = null; // OutputStream output = new FileOutputStream(tempFile); output = new ByteArrayOutputStream(); try { dataHandler.writeTo(output); } catch (IOException e) { // TODO Auto-generated catch block throw e; } return output.toByteArray(); } public static DataHandler makeDataHandler(Resource resource, File tempFile) throws IOException, RegistryException{ if (resource.getContent() == null) { return null; } InputStream is = null; OutputStream os = null; try { os = new FileOutputStream(tempFile); if (resource.getContent() instanceof String[]) { String[] strArray = (String[]) resource.getContent(); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(strArray); } else { try { is = resource.getContentStream(); // os = new FileOutputStream(tempFile); byte[] buffer = new byte[4096]; for (int n; (n = is.read(buffer)) != -1; ) os.write(buffer, 0, n); os.flush(); } finally { if (is != null) { is.close(); } } } } finally { if (os != null) { os.close(); } } // Base64Binary base64Binary = new Base64Binary(); return new DataHandler(new FileDataSource(tempFile)); } public static WSResource newResourcetoWSResource(Resource resource) { WSResource wsResource = new WSResource(); // wsResource.setAuthorUserName(resource.getAuthorUserName()); // wsResource.setId(resource.getId()); // wsResource.setResource(resource); return wsResource; } public static WSCollection newCollectiontoWSCollection(Collection collection) { WSCollection wsCollection = new WSCollection(); // wsCollection.setCollection(collection); return wsCollection; } public static WSTaggedResourcePath[] exchangeTaggedResourcepath(TaggedResourcePath[] registry){ if(registry == null){ return null; } WSTaggedResourcePath[] wsTRP = new WSTaggedResourcePath[registry.length]; for(int i=0;i<registry.length;i++) { wsTRP[i] = new WSTaggedResourcePath(); wsTRP[i].setResourcePath(registry[i].getResourcePath()); wsTRP[i].setTagCount(registry[i].getTagCount()); int size = registry[i].getTagCounts().keySet().size(); String[] key = registry[i].getTagCounts().keySet().toArray(new String[size]); WSMap[] map = new WSMap[size]; for(int j=0;j<size;j++){ map[j] = new WSMap(); map[j].setKey(key[j]); map[j].setValue(registry[i].getTagCounts().get(key[j])); } wsTRP[i].setTagCounts(map); } return wsTRP; } public static TaggedResourcePath[] exchangeWSResourcePath(WSTaggedResourcePath[] wsrpath){ if(wsrpath == null){ return null; } TaggedResourcePath[] trPath = new TaggedResourcePath[wsrpath.length]; for(int i=0;i<wsrpath.length;i++){ trPath[i] = new TaggedResourcePath(); Map pathmap = new HashMap(); trPath[i].setResourcePath(wsrpath[i].getResourcePath()); trPath[i].setTagCount(wsrpath[i].getTagCount()); WSMap[] map = wsrpath[i].getTagCounts(); for(int j=0;j<map.length;j++){ pathmap.put(map[j].getKey(),Long.parseLong(map[j].getValue())); } trPath[i].setTagCounts(pathmap); } return trPath; } public static WSComment RegistryCommenttoWSComment(Comment comment){ WSComment wsComment = new WSComment(); wsComment.setCommentPath(comment.getCommentPath()); wsComment.setCommentID(comment.getCommentID()); wsComment.setResourcePath(comment.getResourcePath()); if (comment.getPath() != null) wsComment.setPath(comment.getPath()); wsComment.setText(comment.getText()); if (comment.getCreatedTime() != null) wsComment.setTime(comment.getCreatedTime().getTime()); if (comment.getUser() != null) wsComment.setUser(comment.getUser()); return wsComment; } public static Comment WSCommenttoRegistryComment(WSComment wsComment){ Comment rcomment = new Comment(); if (wsComment.getCommentPath() != null) rcomment.setCommentPath(wsComment.getCommentPath()); if (wsComment.getPath() != null) rcomment.setPath(wsComment.getPath()); rcomment.setCommentID(wsComment.getCommentID()); rcomment.setResourcePath(wsComment.getResourcePath()); rcomment.setText(wsComment.getText()); rcomment.setTime(new Date(wsComment.getTime())); if (wsComment.getUser() != null) rcomment.setUser(wsComment.getUser()); return rcomment; } private static WSProperty[] getPropertiesForWSResource(Properties props){ Enumeration keys = props.propertyNames(); Enumeration keys2 = props.propertyNames(); int size =0,i=0; while(keys.hasMoreElements()){ keys.nextElement(); size++; } String[] keyarray = new String[size]; while(keys2.hasMoreElements()){ keyarray[i] = (String)keys2.nextElement(); i++; } // To avoid property element not being created in soap message if (keyarray.length == 0) { WSProperty[] properties = new WSProperty[1]; properties[0] = new WSProperty(); return properties; } WSProperty[] properties = new WSProperty[keyarray.length]; for(i = 0; i < keyarray.length; i++){ properties[i] = new WSProperty(); properties[i].setKey(keyarray[i]); List<String> list = (List<String>)props.get(keyarray[i]); String[] values = new String[list.size()]; int j = 0; for (String str : list ) { values[j] = str; j++; } properties[i].setValues(values); } return properties; } private static Properties getPropertiesForResource(WSProperty[] wsprops,Properties properties){ for(int i=0;i<wsprops.length;i++){ if (wsprops[i].getValues() == null) { properties.put(wsprops[i].getKey(), new LinkedList<String>()); } else { properties.put(wsprops[i].getKey(),new LinkedList<String>( Arrays.asList(wsprops[i].getValues()))); } } return properties; } public static WSAssociation transformAssociationToWSAssociation(Association asso) { return new WSAssociation(asso.getSourcePath(), asso.getDestinationPath(), asso.getAssociationType()); } public static WSLogEntry transformLogEntryToWSLogEntry(LogEntry logEntry) { WSLogEntry wsLogEntry = new WSLogEntry(); wsLogEntry.setResourcePath(logEntry.getResourcePath()); wsLogEntry.setUserName(logEntry.getUserName()); wsLogEntry.setDate(logEntry.getDate().getTime()); wsLogEntry.setAction(logEntry.getAction()); wsLogEntry.setActionData(logEntry.getActionData()); return wsLogEntry; } public static WSTag transformTagToWSTag(Tag tag) { WSTag wsTag = new WSTag(); wsTag.setCategory(tag.getCategory()); wsTag.setTagName(tag.getTagName()); wsTag.setTagCount(tag.getTagCount()); return wsTag; } }