/* * Copyright (c) 2005-2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you 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.governance.metadata.provider.version; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.governance.metadata.Constants; import org.wso2.carbon.governance.metadata.VersionBase; import org.wso2.carbon.governance.metadata.provider.util.Util; import org.wso2.carbon.registry.core.Registry; import org.wso2.carbon.registry.core.Resource; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.governance.metadata.exception.MetadataException; import org.wso2.carbon.governance.metadata.models.version.GenericVersionV1; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import java.util.List; import java.util.Map; public class GenericVersionProviderV1 implements VersionBaseProvider { private static final Log log = LogFactory.getLog(GenericVersionProviderV1.class); private String mediaType; public GenericVersionProviderV1(String mediaType) { this.mediaType = mediaType; } public String getMediaType() { return mediaType; } @Override public Resource buildResource(VersionBase metadata, Resource resource) throws MetadataException { OMElement root = Util.getContentRoot(); OMElement attributes = Util.getAttributeRoot(); OMElement properties = Util.getPropertyRoot(); createAttributesContent((GenericVersionV1) metadata, attributes); createPropertiesContent((GenericVersionV1) metadata, properties); root.addChild(properties); root.addChild(attributes); try { String content = root.toStringWithConsume(); resource.setContent(content); resource.setMediaType(metadata.getMediaType()); resource.setUUID(metadata.getUUID()); } catch (XMLStreamException e) { log.error("Xml stream exception occurred while building resource content " + e.getMessage()); throw new MetadataException("Xml stream exception occurred while building resource content", e); } catch (RegistryException e) { throw new MetadataException(e.getMessage(), e); } return resource; } @Override public Resource updateResource(VersionBase newMetadata, Resource resource) throws MetadataException { return buildResource(newMetadata, resource); } @Override public GenericVersionV1 get(Resource resource, Registry registry) throws MetadataException { try { byte[] contentBytes = (byte[]) resource.getContent(); OMElement root = Util.buildOMElement(contentBytes); Map<String, List<String>> propBag = Util.getPropertyBag(root); return getFilledBean(root, propBag, registry); } catch (RegistryException e) { throw new MetadataException("Error occurred while obtaining resource metadata content uuid = " + resource.getUUID(), e); } } private GenericVersionV1 getFilledBean(OMElement root, Map<String, List<String>> propBag, Registry registry) throws MetadataException { Map<String, List<String>> attributeMap; OMElement attributes = root.getFirstChildWithName(new QName(Constants.CONTENT_ATTRIBUTE_EL_ROOT_NAME)); attributeMap = Util.getAttributeMap(attributes); String uuid = attributeMap.get(Constants.ATTRIBUTE_UUID).get(0); String name = attributeMap.get((Constants.ATTRIBUTE_METADATA_NAME)).get(0); String baseName = attributeMap.get(Constants.ATTRIBUTE_METADATA_BASE_NAME).get(0); String baseUUID = attributeMap.get(Constants.ATTRIBUTE_BASE_UUID).get(0); return new GenericVersionV1(registry, name, uuid, baseName, baseUUID, propBag, attributeMap); } private void createAttributesContent(GenericVersionV1 genericVersionV1, OMElement element) throws MetadataException { OMFactory factory = OMAbstractFactory.getOMFactory(); OMElement uuid = factory.createOMElement(new QName(Constants.ATTRIBUTE_UUID)); uuid.setText(genericVersionV1.getUUID()); OMElement name = factory.createOMElement(new QName(Constants.ATTRIBUTE_METADATA_NAME)); name.setText(genericVersionV1.getName()); OMElement baseName = factory.createOMElement(new QName(Constants.ATTRIBUTE_METADATA_BASE_NAME)); baseName.setText(genericVersionV1.getBaseName()); OMElement baseUUID = factory.createOMElement(new QName(Constants.ATTRIBUTE_BASE_UUID)); baseUUID.setText(genericVersionV1.getBaseUUID()); element.addChild(uuid); element.addChild(name); element.addChild(baseName); element.addChild(baseUUID); } private void createPropertiesContent(GenericVersionV1 serviceV1, OMElement element) { OMFactory factory = OMAbstractFactory.getOMFactory(); for (Map.Entry<String, List<String>> entry : serviceV1.getPropertyBag().entrySet()) { if (entry.getValue() == null) continue; OMElement attribute = factory.createOMElement(new QName(entry.getKey())); attribute.setText(entry.getValue().get(0)); element.addChild(attribute); } } }