Package de.innovationgate.wgpublisher.design.sync

Source Code of de.innovationgate.wgpublisher.design.sync.DesignDeployment

/*******************************************************************************
* Copyright 2009, 2010 Innovation Gate GmbH. All Rights Reserved.
*
* This file is part of the OpenWGA server platform.
*
* OpenWGA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* In addition, a special exception is granted by the copyright holders
* of OpenWGA called "OpenWGA plugin exception". You should have received
* a copy of this exception along with OpenWGA in file COPYING.
* If not, see <http://www.openwga.com/gpl-plugin-exception>.
*
* OpenWGA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenWGA in file COPYING.
* If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package de.innovationgate.wgpublisher.design.sync;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.log4j.Logger;

import de.innovationgate.webgate.api.WGAPIException;
import de.innovationgate.webgate.api.WGDatabase;
import de.innovationgate.webgate.api.WGDocument;
import de.innovationgate.webgate.api.WGException;
import de.innovationgate.wgpublisher.design.fs.AbstractDesignFile;
import de.innovationgate.wgpublisher.design.fs.FileSystemDesignManager;

public abstract class DesignDeployment extends AbstractDesignFile {

    protected long _timestampOfCodeFile = 0;
    protected long _timestampOfMetadataFile = 0;
    private transient long _codeFileSize = -1;
    private String _documentKey;
    private transient int _failures = 0;
    protected DesignSyncStatus _parent;

    public DesignDeployment(DesignSyncStatus parent, int type, String documentKey, FileObject codeFile) throws IOException, WGDesignSyncException {
        super(parent.getManager(), codeFile, type);
        _parent = parent;
        _documentKey = documentKey;
    }
   
   
    /**
     * Private No-args constructor. For serialisation only
     */
    protected DesignDeployment() {
       
    }

    public boolean isUpdated() throws InstantiationException, IllegalAccessException, IOException, WGDesignSyncException {

        FileObject metadataFile = getMetadataFile();
        FileObject codeFile = getCodeFile();
       
        if (_codeFileSize == -1) {
            _codeFileSize = codeFile.getContent().getSize();
        }
       
        return ((
                metadataFile.exists() &&
                metadataFile.getContent().getLastModifiedTime() != _timestampOfMetadataFile) ||
                codeFile.getContent().getLastModifiedTime() != _timestampOfCodeFile ||
                codeFile.getContent().getSize() != _codeFileSize
        );

    }
   
    public boolean isDeleted() throws FileSystemException, WGDesignSyncException {
        return !getCodeFile().exists();
    }

    public abstract void performUpdate(WGDatabase db) throws WGException, IOException, InstantiationException, IllegalAccessException, WGDesignSyncException;



    @Override
    public FileSystemDesignManager getManager() {
        return _parent.getManager();
    }

    /**
     * @return Returns the timestampOfCodeFile.
     */
    public long getTimestampOfCodeFile() {
        return _timestampOfCodeFile;
    }

    /**
     * @return Returns the timestampOfMetadataFile.
     */
    public long getTimestampOfMetadataFile() {
        return _timestampOfMetadataFile;
    }

    public void resetUpdateInformation() throws InstantiationException, IllegalAccessException, IOException, WGDesignSyncException {
        _timestampOfCodeFile = getCodeFile().getContent().getLastModifiedTime();
        _codeFileSize = getCodeFile().getContent().getSize();
        FileObject metadataFile = getMetadataFile();
        if (metadataFile.exists()) {
            _timestampOfMetadataFile = metadataFile.getContent().getLastModifiedTime();
        }
    }

    /**
     * @return Returns the documentKey.
     */
    public String getDocumentKey() {
        return _documentKey;
    }

    public void performDeletion(WGDatabase db) throws WGException {
        WGDocument doc = getDocument(db);
        if (doc != null) {
            doc.remove();
        }
    }
   
    @Override
    protected Logger getLog() {
        return getManager().getLog();
    }


    public WGDocument getDocument(WGDatabase db) throws WGAPIException {
        return db.getDocumentByDocumentKey(getDocumentKey());
    }
    /**
     * @return Returns the parent.
     */
    public DesignSyncStatus getParent() {
        return _parent;
    }

    /**
     * @param parent The parent to set.
     */
    public void setParent(DesignSyncStatus parent) {
        _parent = parent;
    }
   
    public void doAttachFile(WGDocument doc, FileObject file) throws WGDesignSyncException {
       
        try {
            if (!file.exists()) {
                throw new WGDesignSyncException("Attaching file '" + file.getName().getPath() + "' to document '" + doc.getDocumentKey() + "' failed because the file does not exist.");
            }
           
            if (!doc.attachFile(file.getContent().getInputStream(), file.getName().getBaseName())) {
                throw new WGDesignSyncException("Attaching file '" + file.getName().getPath() + "' to document '" + doc.getDocumentKey() + "' failed.");
            }
        }
        catch (Exception e) {
            throw new WGDesignSyncException("Attaching file '" + file.getName().getPath() + "' to document '" + doc.getDocumentKey() + "' failed.", e);
        }
       
       
       
       
    }
   
    public void doSaveDocument(WGDocument doc) throws WGDesignSyncException {
       
        try {
            if (!doc.save()) {
                throw new WGDesignSyncException("Saving document '" + doc.getDocumentKey() + "' failed.");
            }
        }
        catch (WGAPIException e) {
            throw new WGDesignSyncException("Saving document '" + doc.getDocumentKey() + "' failed because of wgapi exception: " + e.getMessage(), e);
        }       
    }
   
    public void doRemoveFile(WGDocument doc, String fileName) throws WGDesignSyncException {
        try {
            if (!doc.removeFile(fileName)) {
                throw new WGDesignSyncException("Removing file '" + fileName + "' from document '" + doc.getDocumentKey() + "' failed.");
            }
        } catch (WGAPIException e) {
            throw new WGDesignSyncException("Removing file '" + fileName + "' from document '" + doc.getDocumentKey() + "' failed bc. of backend exception: " + e.getMessage(), e);
        }
       
    }
   
    protected boolean addFailure() {
        _failures++;
        if (_failures >= 5) {
            _failures = 0;
            return true;
        }
        else {
            return false;
        }
    }


    @Override
    protected void createMetadataFile(FileObject metadataFile) throws InstantiationException, IllegalAccessException, UnsupportedEncodingException, FileSystemException, IOException {
        super.createMetadataFile(metadataFile);
        _timestampOfMetadataFile = metadataFile.getContent().getLastModifiedTime();
    }
   
    private Object readResolve() {
        _codeFileSize = -1;
        return this;
    }
}
TOP

Related Classes of de.innovationgate.wgpublisher.design.sync.DesignDeployment

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.