Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.services.data;

import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
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 pt.utl.ist.berserk.logic.serviceManager.IService;

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

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

public class RepositoryService implements IService
{

    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)
    {
        return storeRepositoryFile(stream,contentType,extension,size,name,description,accessControl,userSession.getUser());
    }
    /**
     * @param stream        .
     * @param contentType   .
     * @param size          .
     * @param name          .
     * @param description   .
     * @param extension     .
     * @param accessControl .
     * @param user   .
     * @return the identifier to retrieve the document
     */

    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, User user)
    {
        RepositoryFileImpl repositoryFile = DomainObjectFactory.createRepositoryFileImpl();
        repositoryFile.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        repositoryFile.setDeleted(false);
        repositoryFile.setAccessControl(accessControl.getKey());
        repositoryFile.setOwner(user);
        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;
    }


    public RepositoryFileImpl loadView(1.5.0/docs/api/java/lang/String.html">String identifier,UserSession sess)
       {
           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;
       }

    public IRepositoryFile loadByIdentifier(1.5.0/docs/api/java/lang/String.html">String identifier)
    {
        return load(identifier,null);
    }
    /**
     * @param identifier  .
     * @param userSession .
     * @return a view with an inputStream for document
     */

    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  .
     * @param userSession .
     * @return a view with an inputStream for document
     */

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

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

    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;
    }

    public static 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());

        if (repositoryFile.getRepositoryFile().getOwner().getName() != null)
        {
            5+0%2Fdocs%2Fapi+Element">Element oName = DocumentFactory.getInstance().createElement("name");
            oName.setText(repositoryFile.getRepositoryFile().getOwner().getName());
            owner.add(oName);
        }

        if (DocumentFactory.getInstance().createElement("roles") != null)
        {
            5+0%2Fdocs%2Fapi+Element">Element oRoles = DocumentFactory.getInstance().createElement("roles");
            oRoles.setText(repositoryFile.getRepositoryFile().getOwner().getRoles());
            owner.add(oRoles);
        }

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


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

            if (((User) repositoryFile.getRepositoryFile().getOwner()).getEmail() != null)
            {
                5+0%2Fdocs%2Fapi+Element">Element oEmail = DocumentFactory.getInstance().createElement("email");
                oEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getEmail());
                owner.add(oEmail);
            }

            if (((User) repositoryFile.getRepositoryFile().getOwner()).getOutEmail() != null)
            {
                5+0%2Fdocs%2Fapi+Element">Element outEmail = DocumentFactory.getInstance().createElement("outEmail");
                outEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getOutEmail());
                owner.add(outEmail);
            }

            if (((User) repositoryFile.getRepositoryFile().getOwner()).getBi() != null)
            {
                5+0%2Fdocs%2Fapi+Element">Element biEmail = DocumentFactory.getInstance().createElement("bi");
                biEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getBi());
                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;
    }
}