Subversion Repositories bacoAlunos

Rev

Rev 332 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.data;

import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.impl.DefaultRepositoryFile;
import pt.estgp.estgweb.web.utils.DatesUtils;

import java.io.InputStream;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;

import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.Document;

/**
 * @author Jorge Machado
 * @date 4/Jun/2008
 * @see pt.estgp.estgweb.services.data
 */

public class RepositoryService implements IService
{

    /**
     *
     * @param stream  .
     * @param contentType .
     * @param size  .
     * @param name .
     * @param description .
     * @return the identifier to retrieve the document
     * @param extension .
     * @param accessControl .
     * @param userSession .
     */

    public 1.5.0/docs/api/java/lang/String.html">String storeRepositoryFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String contentType, 1.5.0/docs/api/java/lang/String.html">String extension,int size, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String description, ResourceAccessControlEnum accessControl, UserSession userSession)
    {
        RepositoryFileImpl repositoryFile = DomainObjectFactory.createRepositoryFileImpl();
        repositoryFile.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        repositoryFile.setDeleted(false);
        repositoryFile.setAccessControl(accessControl.getKey());
        repositoryFile.setOwner(userSession.getUser());
        DaoFactory.getRepositoryFileDaoImpl().save(repositoryFile);

        RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
        repositoryFileVersion.setName(name);
        repositoryFileVersion.setSize(size);
        repositoryFileVersion.setDescription(description);
        repositoryFileVersion.setContentType(contentType);
        repositoryFileVersion.setExtension(extension);

        5+0%2Fdocs%2Fapi+Document">Document dom = createXMLdescription(repositoryFileVersion);
        RepositoryManager.storeDescription(dom,repositoryFileVersion.getId());
        RepositoryManager.store(stream,repositoryFileVersion.getId());
        return new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder().append(repositoryFile.getId()).toString();
    }



    /**
     *
     * @param stream       .
     * @param contentType   .
     * @param size .
     * @param name  .
     * @param description  .
     * @param identifier .
     * @param extension .
     * @param accessControl .
     */

    public void updateRepositoryFile(1.5.0/docs/api/java/lang/String.html">String identifier, 5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String contentType, 1.5.0/docs/api/java/lang/String.html">String extension, int size, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String description, ResourceAccessControlEnum accessControl)
    {

        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
        repositoryFile.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        repositoryFile.setAccessControl(accessControl.getKey());
        RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
        repositoryFileVersion.setName(name);
        repositoryFileVersion.setSize(size);
        repositoryFileVersion.setDescription(description);
        repositoryFileVersion.setContentType(contentType);
        repositoryFileVersion.setExtension(extension);
        5+0%2Fdocs%2Fapi+Document">Document dom = createXMLdescription(repositoryFileVersion);
        RepositoryManager.storeDescription(dom,repositoryFileVersion.getId());
        RepositoryManager.store(stream,repositoryFileVersion.getId());
    }


   

    /**
     *
     * @param identifier .
     * @return a view of a document
     */

    public RepositoryFileImpl loadView(1.5.0/docs/api/java/lang/String.html">String identifier)
    {
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
        for(RepositoryFileVersionImpl version: repositoryFile.getRepositoryFileVersions())
        {
            version.getSaveDate();
        }
        return repositoryFile;
    }

    /**
     *
     * @param identifier .
     * @return a view with an inputStream for document
     * @param userSession .
     */

    public IRepositoryFile load(1.5.0/docs/api/java/lang/String.html">String identifier,UserSession userSession)
    {
        DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().load(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
        iRepositoryFile.setContentType(repositoryFile.getLastVersion().getContentType());
        iRepositoryFile.setSize(repositoryFile.getLastVersion().getSize());
        iRepositoryFile.setName(repositoryFile.getLastVersion().getName());
        iRepositoryFile.setInput(RepositoryManager.load(repositoryFile.getLastVersion().getId()));
        return iRepositoryFile;
    }

    /**
     *
     * @param identifier .
     * @return a view with an inputStream for document
     * @param userSession .
     */

    public List<IRepositoryFile> loadVersions(1.5.0/docs/api/java/lang/String.html">String identifier,UserSession userSession)
    {
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().load(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
        List<IRepositoryFile> versions = new ArrayList<IRepositoryFile>();
        for(RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
        {
            DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
            iRepositoryFile.setContentType(version.getContentType());
            iRepositoryFile.setSize(version.getSize());
            iRepositoryFile.setName(DatesUtils.getStringFromDateForFilename(version.getSaveDate()) + "-" + version.getName());
            iRepositoryFile.setInput(RepositoryManager.load(version.getId()));
            versions.add(iRepositoryFile);
        }
        return versions;
    }

    /**
     * Create a new File Version
     * @param repositoryFile .
     * @return .
     */

    private RepositoryFileVersionImpl createVersion(RepositoryFileImpl repositoryFile)
    {
        RepositoryFileVersionImpl repositoryFileVersion = DomainObjectFactory.createRepositoryFileVersionImpl();
        repositoryFileVersion.setRepositoryFile(repositoryFile);
        if(repositoryFile.getRepositoryFileVersions() == null)
            repositoryFile.setRepositoryFileVersions(new HashSet<RepositoryFileVersionImpl>());
        repositoryFile.getRepositoryFileVersions().add(repositoryFileVersion);
        repositoryFile.setLastVersion(repositoryFileVersion);
        DaoFactory.getRepositoryFileVersionDaoImpl().save(repositoryFileVersion);
        return repositoryFileVersion;
    }

    private 5+0%2Fdocs%2Fapi+Document">Document createXMLdescription(RepositoryFileVersionImpl repositoryFile)
    {
        org.dom4j.5+0%2Fdocs%2Fapi+Document">Document dom = DocumentFactory.getInstance().createDocument();
        5+0%2Fdocs%2Fapi+Element">Element rootElement = DocumentFactory.getInstance().createElement("repositoryFileVersion");
        dom.setRootElement(rootElement);
        rootElement.addAttribute("id",""+repositoryFile.getId());

        5+0%2Fdocs%2Fapi+Element">Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
        saveDate.setText(DatesUtils.getStringFromDateForFilename(repositoryFile.getSaveDate()));

        5+0%2Fdocs%2Fapi+Element">Element name = DocumentFactory.getInstance().createElement("name");
        name.setText(""+repositoryFile.getName());

        5+0%2Fdocs%2Fapi+Element">Element contentType = DocumentFactory.getInstance().createElement("contentType");
        contentType.setText(repositoryFile.getContentType());

        5+0%2Fdocs%2Fapi+Element">Element extension = DocumentFactory.getInstance().createElement("extension");
        extension.setText(""+repositoryFile.getExtension());

        5+0%2Fdocs%2Fapi+Element">Element size = DocumentFactory.getInstance().createElement("sizeKb");
        size.setText(""+repositoryFile.getSizeKb());

        5+0%2Fdocs%2Fapi+Element">Element description = DocumentFactory.getInstance().createElement("description");
        description.setText(repositoryFile.getDescription());

        rootElement.add(saveDate);
        rootElement.add(name);
        rootElement.add(contentType);
        rootElement.add(extension);
        rootElement.add(size);
        rootElement.add(description);

        //Repository File Generics
        5+0%2Fdocs%2Fapi+Element">Element repositoryFileElem = DocumentFactory.getInstance().createElement("repositoryFile");
        rootElement.add(repositoryFileElem);

        repositoryFileElem.addAttribute("id","" + repositoryFile.getRepositoryFile().getId());
        5+0%2Fdocs%2Fapi+Element">Element rSaveDate = DocumentFactory.getInstance().createElement("saveDate");
        rSaveDate.setText(DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getSaveDate()));

        5+0%2Fdocs%2Fapi+Element">Element rUpdateDate = DocumentFactory.getInstance().createElement("updateDate");
        rUpdateDate.setText(DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getUpdateDate()));


        5+0%2Fdocs%2Fapi+Element">Element accessControl = DocumentFactory.getInstance().createElement("accessControl");
        accessControl.setText(repositoryFile.getRepositoryFile().getAccessControl());

        5+0%2Fdocs%2Fapi+Element">Element deleted = DocumentFactory.getInstance().createElement("deleted");
        deleted.setText("" + repositoryFile.getRepositoryFile().isDeleted());

        repositoryFileElem.add(rSaveDate);
        repositoryFileElem.add(rUpdateDate);
        repositoryFileElem.add(accessControl);
        repositoryFileElem.add(deleted);

        5+0%2Fdocs%2Fapi+Element">Element owner = DocumentFactory.getInstance().createElement("owner");
        repositoryFileElem.add(owner);
        owner.addAttribute("id","" + repositoryFile.getRepositoryFile().getOwner().getId());
        5+0%2Fdocs%2Fapi+Element">Element oName = DocumentFactory.getInstance().createElement("name");
        oName.setText(repositoryFile.getRepositoryFile().getOwner().getName());

        5+0%2Fdocs%2Fapi+Element">Element oRoles = DocumentFactory.getInstance().createElement("roles");
        oRoles.setText(repositoryFile.getRepositoryFile().getOwner().getRoles());

        5+0%2Fdocs%2Fapi+Element">Element oClass = DocumentFactory.getInstance().createElement("class");
        oClass.setText(repositoryFile.getRepositoryFile().getOwner().getClass().getSimpleName());

        owner.add(oName);
        owner.add(oRoles);
        owner.add(oClass);
        if(repositoryFile.getRepositoryFile().getOwner() instanceof User)
        {
            5+0%2Fdocs%2Fapi+Element">Element oUsername = DocumentFactory.getInstance().createElement("username");
            oUsername.setText(((User)repositoryFile.getRepositoryFile().getOwner()).getUsername());

            5+0%2Fdocs%2Fapi+Element">Element oEmail = DocumentFactory.getInstance().createElement("email");
            oEmail.setText(((User)repositoryFile.getRepositoryFile().getOwner()).getEmail());

            5+0%2Fdocs%2Fapi+Element">Element outEmail = DocumentFactory.getInstance().createElement("outEmail");
            outEmail.setText(((User)repositoryFile.getRepositoryFile().getOwner()).getOutEmail());

            5+0%2Fdocs%2Fapi+Element">Element biEmail = DocumentFactory.getInstance().createElement("bi");
            biEmail.setText(((User)repositoryFile.getRepositoryFile().getOwner()).getBi());

            owner.add(oUsername);
            owner.add(oEmail);
            owner.add(outEmail);
            owner.add(biEmail);
            if(repositoryFile.getRepositoryFile().getOwner() instanceof Teacher)
            {
                5+0%2Fdocs%2Fapi+Element">Element code = DocumentFactory.getInstance().createElement("teacherCode");
                code.setText(""+((Teacher)repositoryFile.getRepositoryFile().getOwner()).getSigesCode());
                owner.add(code);
            }
            if(repositoryFile.getRepositoryFile().getOwner() instanceof Student)
            {
                5+0%2Fdocs%2Fapi+Element">Element code = DocumentFactory.getInstance().createElement("studentCode");
                code.setText(""+((Student)repositoryFile.getRepositoryFile().getOwner()).getSigesCode());
                owner.add(code);
            }
        }
        return dom;
    }
}