org.wso2.carbon.governance.metadata.provider.version.ServiceVersionProviderV1.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.carbon.governance.metadata.provider.version.ServiceVersionProviderV1.java

Source

/*
 *  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.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.Constants;
import org.wso2.carbon.governance.metadata.exception.MetadataException;
import org.wso2.carbon.governance.metadata.models.version.ServiceVersionV1;

import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import java.util.List;
import java.util.Map;

public class ServiceVersionProviderV1 implements VersionBaseProvider {

    private static final Log log = LogFactory.getLog(ServiceVersionProviderV1.class);

    private String mediaType;

    public ServiceVersionProviderV1(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((ServiceVersionV1) metadata, attributes);
        createPropertiesContent((ServiceVersionV1) 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 ServiceVersionV1 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 ServiceVersionV1 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 ServiceVersionV1(registry, name, uuid, baseName, baseUUID, propBag, attributeMap);
    }

    private void createAttributesContent(ServiceVersionV1 serviceV1, OMElement element) throws MetadataException {

        OMFactory factory = OMAbstractFactory.getOMFactory();

        OMElement uuid = factory.createOMElement(new QName(Constants.ATTRIBUTE_UUID));
        uuid.setText(serviceV1.getUUID());

        OMElement name = factory.createOMElement(new QName(Constants.ATTRIBUTE_METADATA_NAME));
        name.setText(serviceV1.getName());

        OMElement baseName = factory.createOMElement(new QName(Constants.ATTRIBUTE_METADATA_BASE_NAME));
        baseName.setText(serviceV1.getBaseName());

        OMElement baseUUID = factory.createOMElement(new QName(Constants.ATTRIBUTE_BASE_UUID));
        baseUUID.setText(serviceV1.getBaseUUID());

        OMElement mediaType = factory.createOMElement(new QName(Constants.ATTRIBUTE_MEDIA_TYPE));
        mediaType.setText(serviceV1.getMediaType());

        element.addChild(uuid);
        element.addChild(name);
        element.addChild(baseName);
        element.addChild(baseUUID);
        element.addChild(mediaType);
    }

    private void createPropertiesContent(ServiceVersionV1 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);
        }

    }

}