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