com.athena.chameleon.engine.core.analyzer.parser.IbmWebBndXMIParser.java Source code

Java tutorial

Introduction

Here is the source code for com.athena.chameleon.engine.core.analyzer.parser.IbmWebBndXMIParser.java

Source

/*
 * Copyright 2012 the original author or authors.
 *
 * 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.
 *
 * Revision History
 * Author         Date            Description
 * ---------------   ----------------   ------------
 * Sang-cheon Park   2012. 12. 13.      First Draft.
 */
package com.athena.chameleon.engine.core.analyzer.parser;

import java.io.File;
import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import org.springframework.util.Assert;

import com.athena.chameleon.common.utils.ThreadLocalUtil;
import com.athena.chameleon.engine.constant.ChameleonConstants;
import com.athena.chameleon.engine.entity.pdf.AnalyzeDefinition;
import com.athena.chameleon.engine.entity.pdf.EjbRecommend;
import com.athena.chameleon.engine.entity.pdf.ExceptionInfo;
import com.athena.chameleon.engine.entity.pdf.PDFMetadataDefinition;
import com.athena.peacock.engine.common.StackTracer;

/**
 * <pre>
 *
 * </pre>
 * 
 * @author Sang-cheon Park
 * @version 1.0
 */
public class IbmWebBndXMIParser extends Parser {

    /* (non-Javadoc)
     * @see com.athena.chameleon.engine.core.analyzer.parser.Parser#parse(java.io.File, com.athena.chameleon.engine.entity.pdf.AnalyzeDefinition)
     */
    @Override
    public Object parse(File file, AnalyzeDefinition analyzeDefinition) {
        Assert.notNull(file, "file cannot be null.");
        Assert.notNull(analyzeDefinition, "analyzeDefinition cannot be null.");

        this.analyzeDefinition = analyzeDefinition;

        // only zip and war
        String key = ChameleonConstants.ZIP_ROOT_DIR;

        if (StringUtils.isEmpty((String) ThreadLocalUtil.get(key))) {
            key = ChameleonConstants.WAR_ROOT_DIR;
        }

        PDFMetadataDefinition metadataDefinition = (PDFMetadataDefinition) ThreadLocalUtil
                .get(ChameleonConstants.PDF_METADATA_DEFINITION);
        EjbRecommend ejbRecommend = new EjbRecommend();

        try {
            ejbRecommend = new EjbRecommend();
            ejbRecommend.setItem(file.getName());
            ejbRecommend.setTransFlag(false);
            // zip, war
            ejbRecommend.setLocation(removeTempDir(file.getParent(), key));
            ejbRecommend.setContents(fileToString(file.getAbsolutePath()));

            metadataDefinition.getWebRecommendList().add(ejbRecommend);
        } catch (IOException e) {
            logger.error("IOException has occurred.", e);
        }

        SAXBuilder builder = null;
        Document doc = null;
        String context = null;

        try {
            builder = new SAXBuilder();
            doc = builder.build(file);

            // src/main/resources/jbossweb/jboss-web.xml
            String jbossWeb = fileToString(this.getClass().getResource("/jbossweb/jboss-web.xml").getFile());
            jbossWeb = jbossWeb.replaceAll("\\$\\{loaderRepository\\}",
                    "com.athena.chameleon:loader=" + ThreadLocalUtil.get(ChameleonConstants.PROJECT_NAME));

            if (doc.getRootElement().getChild("context-root", doc.getRootElement().getNamespace()) != null) {
                context = doc.getRootElement().getChild("context-root", doc.getRootElement().getNamespace())
                        .getText();
                jbossWeb = jbossWeb.replaceAll("\\$\\{contextRoot\\}", context);
            } else {
                jbossWeb = jbossWeb.replaceAll("<context-root>\\$\\{contextRoot\\}</context-root>", "");
            }

            rewrite(new File(file.getParentFile(), "jboss-web.xml"), jbossWeb);

            ejbRecommend = new EjbRecommend();
            ejbRecommend.setItem("jboss-web.xml");
            ejbRecommend.setTransFlag(true);
            ejbRecommend.setLocation(removeTempDir(file.getParent(), key));
            ejbRecommend.setContents(jbossWeb);

            metadataDefinition.getWebRecommendList().add(ejbRecommend);
            metadataDefinition.getWebTransFileList()
                    .add(ejbRecommend.getLocation() + File.separator + "jboss-web.xml");
        } catch (Exception e) {
            logger.error("Unhandled exception has occurred.", e);
            location = removeTempDir(file.getAbsolutePath(), key);
            stackTrace = StackTracer.getStackTrace(e);
            comments = "jboss-web.xml ? ?  ? ?.";
        } finally {
            if (StringUtils.isNotEmpty(stackTrace)) {
                exceptionInfo = new ExceptionInfo();
                exceptionInfo.setLocation(location);
                exceptionInfo.setStackTrace(stackTrace);
                exceptionInfo.setComments(comments);
                ((PDFMetadataDefinition) ThreadLocalUtil.get(ChameleonConstants.PDF_METADATA_DEFINITION))
                        .getExceptionInfoList().add(exceptionInfo);
            }
        }

        return ejbRecommend.getContents();
    }//end of parse()

}
//end of IbmWebBndXMIParser.java