All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.efaps.update.schema.program.JavaUpdate Maven / Gradle / Ivy

/*
 * Copyright 2003 - 2012 The eFaps Team
 *
 * 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:        $Rev: 7483 $
 * Last Changed:    $Date: 2012-05-11 11:57:38 -0500 (Fri, 11 May 2012) $
 * Last Changed By: $Author: [email protected] $
 */

package org.efaps.update.schema.program;

import java.net.URL;
import java.util.Set;

import org.efaps.update.AbstractUpdate;
import org.efaps.update.UpdateLifecycle;
import org.efaps.update.schema.program.esjp.ESJPImporter;
import org.efaps.update.util.InstallationException;

/**
 * Handles the import / update of ESJP's (eFaps stored Java Programs) for eFaps
 * read from a plain Java source code file.
 *
 * @author The eFaps Team
 * @version $Id: JavaUpdate.java 7483 2012-05-11 16:57:38Z [email protected] $
 */
public class JavaUpdate
    extends AbstractSourceUpdate
{
    /**
     * Default constructor to initialize this ESJP update instance for given
     * _url.
     *
     * @param _url  url to the file
     */
    public JavaUpdate(final URL _url)
    {
        super(_url, "Admin_Program_Java");
    }

    /**
     * If the extension of the file is .java, the method returns
     * an instance of this class. The instance of this class owns one definition
     * instance where the code and the name is defined.
     *
     * @param _url      URL of the file depending of the root URL
     * @return Java update definition read by digester
     */
    public static JavaUpdate readFile(final URL _url)
    {
        final JavaUpdate ret = new JavaUpdate(_url);
        final JavaDefinition definition = ret.new JavaDefinition(_url);
        ret.addDefinition(definition);
        return ret;
    }

    /**
     * The Java definition holds the code and the name of the Java class.
     */
    public class JavaDefinition
        extends AbstractSourceDefinition
    {
        /**
         * Importer for the ESJP.
         */
        private ESJPImporter javaCode = null;

        /**
         * @param _url URL to the java file
         */
        protected JavaDefinition(final URL _url)
        {
            super(_url);
        }

        /**
         * Search the instance.
         *
         * @throws InstallationException if the Java source code could not be
         *                               read or the file could not be accessed
         *                               because of the wrong URL
         */
        @Override
        protected void searchInstance()
            throws InstallationException
        {
            if (this.javaCode == null) {
                this.javaCode = new ESJPImporter(getUrl());
            }
            setName(this.javaCode.getProgramName());

            if (this.javaCode.getEFapsUUID() != null) {
                addValue("UUID", this.javaCode.getEFapsUUID().toString());
            }

            if (this.javaCode.getRevision() != null) {
                addValue("Revision", this.javaCode.getRevision());
            }
            if (getInstance() == null) {
                setInstance(this.javaCode.searchInstance());
            }
        }

        /**
         * The method overwrites the method from the super class, because a
         * check in of the Java source code is needed after the update in the
         * database.
         *
         * @param _step             current update step
         * @param _allLinkTypes     all link types to update
         * @throws InstallationException on error
         */
        @Override
        public void updateInDB(final UpdateLifecycle _step,
                               final Set _allLinkTypes)
            throws InstallationException
        {
            if (_step == UpdateLifecycle.EFAPS_UPDATE)  {
                AbstractUpdate.LOG.info("    Update {} '{}'", getInstance().getType().getName(),
                                this.javaCode.getProgramName());
                this.javaCode.updateDB(getInstance());
            } else  {
                super.updateInDB(_step, _allLinkTypes);
            }
        }

        /**
         * {@inheritDoc}
         */
        @Override
        protected String getRevision()
            throws InstallationException
        {
            if (this.javaCode == null) {
                this.javaCode = new ESJPImporter(getUrl());
            }
            return this.javaCode.getRevision();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy