/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java |
---|
107,7 → 107,7 |
String extension = FilesUtils.getExtension(name); |
if(c.getStudiesPlan() == null) |
{ |
String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "course.studies.plan" + c.getName(), ResourceAccessControlEnum.publicDomain,userSession); |
String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain,userSession); |
c.setStudiesPlan(identifier); |
} |
else |
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java |
---|
48,7 → 48,7 |
} |
catch (MalformedURLException e) |
{ |
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO)); |
logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "erro na configuracao do WEB Service", LogMessageTypeEnum.INFO)); |
logger.fatal(e, e); |
return logMessages; |
} |
65,7 → 65,15 |
DaoFactory.getTeacherDaoImpl().save(t); |
newUser = true; |
} |
persist(d, t); |
try |
{ |
persist(d, t); |
} |
catch (Exception e) |
{ |
logger.error(e, e); |
throw e; |
} |
if (newUser) |
CommonServicesManager.getInstance().adviseNew(t); |
else |
95,67 → 103,76 |
* @param d docente |
* @param t teacher |
*/ |
private void persist(Docente d, Teacher t) |
private void persist(Docente d, Teacher t) throws Exception |
{ |
t.setName(d.getNomeFuncionarioInt()); |
t.setEmail(d.getEmail()); |
if(d.getEmail() != null && d.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX)) |
try |
{ |
int atIndex = d.getEmail().indexOf("@"); |
if(atIndex > 0) |
t.setUsername(d.getEmail().substring(0,atIndex)); |
} |
t.setSigesCode(d.getCodigoFuncionario().intValue()); |
t.setAddress(d.getMorada()); |
t.setZip("" + d.getCodigoPostal().intValue()); |
t.setBi(d.getNumeroBi()); |
t.setEmployerName(d.getNomeFuncionario()); |
t.setAcademicName(d.getNomeAcademico()); |
t.setBirthDate(d.getDataNascimento().toGregorianCalendar().getTime()); |
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas |
if (d.getDisciplinas() == null || d.getDisciplinas().getDisciplina() == null || d.getDisciplinas().getDisciplina().size() == 0) |
logger.warn("ATENTION TEACHER WITH ZERO UNITS: codigoFuncionario " + d.getCodigoFuncionario()); |
else |
{ |
Set<CourseUnit> units = new HashSet<CourseUnit>(); |
for (Disciplina disciplina : d.getDisciplinas().getDisciplina()) |
t.setName(d.getNomeFuncionarioInt()); |
t.setEmail(d.getEmail()); |
if (d.getEmail() != null && d.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX)) |
{ |
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(),"" + disciplina.getCodigoCurso(),"" + disciplina.getCdDuracao(),"" + disciplina.getCdLectivo()); |
int atIndex = d.getEmail().indexOf("@"); |
if (atIndex > 0) |
t.setUsername(d.getEmail().substring(0, atIndex)); |
} |
t.setSigesCode(d.getCodigoFuncionario().intValue()); |
t.setAddress(d.getMorada()); |
t.setZip("" + d.getCodigoPostal().intValue()); |
t.setBi(d.getNumeroBi()); |
t.setEmployerName(d.getNomeFuncionario()); |
t.setAcademicName(d.getNomeAcademico()); |
t.setBirthDate(d.getDataNascimento().toGregorianCalendar().getTime()); |
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas |
if (d.getDisciplinas() == null || d.getDisciplinas().getDisciplina() == null || d.getDisciplinas().getDisciplina().size() == 0) |
logger.warn("ATENTION TEACHER WITH ZERO UNITS: codigoFuncionario " + d.getCodigoFuncionario()); |
else |
{ |
Set<CourseUnit> units = new HashSet<CourseUnit>(); |
for (Disciplina disciplina : d.getDisciplinas().getDisciplina()) |
{ |
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo()); |
if(courseUnit == null) |
if (courseUnit == null) |
{ |
logger.warn("Unit not found: semestre:" + disciplina.getCdDuracao() + " codigo:" + disciplina.getCodigo() + " course:" + disciplina.getCodigoCurso() + " year:" + disciplina.getCdLectivo()); |
} |
else |
units.add(courseUnit); |
} |
Iterator<CourseUnit> iter = units.iterator(); |
while (iter.hasNext()) |
{ |
logger.warn("Unit not found: semestre:" + disciplina.getCdDuracao() + " codigo:" + disciplina.getCodigo() + " course:" + disciplina.getCodigoCurso() + " year:" + disciplina.getCdLectivo()); |
CourseUnit courseUnit = iter.next(); |
if (((TeacherImpl) t).isLocalRemovedUnit(courseUnit)) |
iter.remove(); |
} |
else |
units.add(courseUnit); |
} |
Iterator<CourseUnit> iter = units.iterator(); |
while (iter.hasNext()) |
{ |
CourseUnit courseUnit = iter.next(); |
if(((TeacherImpl)t).isLocalRemovedUnit(courseUnit)) |
iter.remove(); |
} |
if(t.getTeachedUnits() != null) |
{ |
for(CourseUnit c: units) |
if (t.getTeachedUnits() != null) |
{ |
boolean isIn = false; |
for(CourseUnit tc : t.getTeachedUnits()) |
for (CourseUnit c : units) |
{ |
if(tc.equals(c)) |
boolean isIn = false; |
for (CourseUnit tc : t.getTeachedUnits()) |
{ |
isIn = true; |
break; |
if (tc.equals(c)) |
{ |
isIn = true; |
break; |
} |
} |
if (!isIn) |
t.getTeachedUnits().add(c); |
} |
if(!isIn) |
t.getTeachedUnits().add(c); |
} |
else |
t.setTeachedUnits(units); |
} |
else |
t.setTeachedUnits(units); |
} |
catch (Exception e) |
{ |
logger.error(e, e); |
throw e; |
} |
} |
/** |
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryService.java |
---|
1,10 → 1,7 |
package pt.estgp.estgweb.services.data; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.RepositoryFileImpl; |
import pt.estgp.estgweb.domain.RepositoryFileVersionImpl; |
import pt.estgp.estgweb.domain.UserSession; |
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; |
16,6 → 13,10 |
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 |
26,12 → 27,15 |
/** |
* |
* @param stream |
* @param contentType |
* @param size |
* @param name |
* @param description |
* @param stream . |
* @param contentType . |
* @param size . |
* @param name . |
* @param description . |
* @return the identifier to retrieve the document |
* @param extension . |
* @param accessControl . |
* @param userSession . |
*/ |
public String storeRepositoryFile(InputStream stream, String contentType, String extension,int size, String name, String description, ResourceAccessControlEnum accessControl, UserSession userSession) |
{ |
49,6 → 53,8 |
repositoryFileVersion.setContentType(contentType); |
repositoryFileVersion.setExtension(extension); |
Document dom = createXMLdescription(repositoryFileVersion); |
RepositoryManager.storeDescription(dom,repositoryFileVersion.getId()); |
RepositoryManager.store(stream,repositoryFileVersion.getId()); |
return new StringBuilder().append(repositoryFile.getId()).toString(); |
} |
57,30 → 63,29 |
/** |
* |
* @param stream |
* @param contentType |
* @param size |
* @param name |
* @param description |
* @return the identifier to retrieve the document |
* @param stream . |
* @param contentType . |
* @param size . |
* @param name . |
* @param description . |
* @param identifier . |
* @param extension . |
* @param accessControl . |
*/ |
public void updateRepositoryFile(String identifier, InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl) |
{ |
RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(Long.parseLong(identifier)); |
repositoryFile.setSaveDate(new Date()); |
repositoryFile.setAccessControl(accessControl.getKey()); |
RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile); |
repositoryFileVersion.setName(name); |
repositoryFileVersion.setSize(size); |
repositoryFileVersion.setDescription(description); |
repositoryFileVersion.setContentType(contentType); |
repositoryFileVersion.setExtension(extension); |
Document dom = createXMLdescription(repositoryFileVersion); |
RepositoryManager.storeDescription(dom,repositoryFileVersion.getId()); |
RepositoryManager.store(stream,repositoryFileVersion.getId()); |
} |
89,7 → 94,7 |
/** |
* |
* @param identifier |
* @param identifier . |
* @return a view of a document |
*/ |
public RepositoryFileImpl loadView(String identifier) |
104,8 → 109,9 |
/** |
* |
* @param identifier |
* @param identifier . |
* @return a view with an inputStream for document |
* @param userSession . |
*/ |
public IRepositoryFile load(String identifier,UserSession userSession) |
{ |
120,8 → 126,9 |
/** |
* |
* @param identifier |
* @param identifier . |
* @return a view with an inputStream for document |
* @param userSession . |
*/ |
public List<IRepositoryFile> loadVersions(String identifier,UserSession userSession) |
{ |
141,8 → 148,8 |
/** |
* Create a new File Version |
* @param repositoryFile |
* @return |
* @param repositoryFile . |
* @return . |
*/ |
private RepositoryFileVersionImpl createVersion(RepositoryFileImpl repositoryFile) |
{ |
155,4 → 162,71 |
DaoFactory.getRepositoryFileVersionDaoImpl().save(repositoryFileVersion); |
return repositoryFileVersion; |
} |
private Document createXMLdescription(RepositoryFileVersionImpl repositoryFile) |
{ |
org.dom4j.Document dom = DocumentFactory.getInstance().createDocument(); |
Element rootElement = DocumentFactory.getInstance().createElement("repositoryFileVersion"); |
dom.setRootElement(rootElement); |
rootElement.addAttribute("id",""+repositoryFile.getId()); |
Element saveDate = DocumentFactory.getInstance().createElement("saveDate",DatesUtils.getStringFromDateForFilename(repositoryFile.getSaveDate())); |
Element name = DocumentFactory.getInstance().createElement("name",""+repositoryFile.getName()); |
Element contentType = DocumentFactory.getInstance().createElement("contentType",repositoryFile.getContentType()); |
Element extension = DocumentFactory.getInstance().createElement("extension",""+repositoryFile.getExtension()); |
Element size = DocumentFactory.getInstance().createElement("sizeKb",""+repositoryFile.getSizeKb()); |
Element description = DocumentFactory.getInstance().createElement("description",repositoryFile.getDescription()); |
rootElement.add(saveDate); |
rootElement.add(name); |
rootElement.add(contentType); |
rootElement.add(extension); |
rootElement.add(size); |
rootElement.add(description); |
//Repository File Generics |
Element repositoryFileElem = DocumentFactory.getInstance().createElement("repositoryFile"); |
rootElement.add(repositoryFileElem); |
repositoryFileElem.addAttribute("id","" + repositoryFile.getRepositoryFile().getId()); |
Element rSaveDate = DocumentFactory.getInstance().createElement("saveDate",DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getSaveDate())); |
Element rUpdateDate = DocumentFactory.getInstance().createElement("updateDate",DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getUpdateDate())); |
Element accessControl = DocumentFactory.getInstance().createElement("accessControl",repositoryFile.getRepositoryFile().getAccessControl()); |
Element deleted = DocumentFactory.getInstance().createElement("deleted","" + repositoryFile.getRepositoryFile().isDeleted()); |
repositoryFileElem.add(rSaveDate); |
repositoryFileElem.add(rUpdateDate); |
repositoryFileElem.add(accessControl); |
repositoryFileElem.add(deleted); |
Element owner = DocumentFactory.getInstance().createElement("owner"); |
repositoryFileElem.add(owner); |
owner.addAttribute("id","" + repositoryFile.getRepositoryFile().getOwner().getId()); |
Element oName = DocumentFactory.getInstance().createElement("name",repositoryFile.getRepositoryFile().getOwner().getName()); |
Element oRoles = DocumentFactory.getInstance().createElement("roles",repositoryFile.getRepositoryFile().getOwner().getRoles()); |
Element oClass = DocumentFactory.getInstance().createElement("class",repositoryFile.getRepositoryFile().getOwner().getClass().getSimpleName()); |
owner.add(oName); |
owner.add(oRoles); |
owner.add(oClass); |
if(repositoryFile.getRepositoryFile().getOwner() instanceof User) |
{ |
Element oUsername = DocumentFactory.getInstance().createElement("username",((User)repositoryFile.getRepositoryFile().getOwner()).getUsername()); |
Element oEmail = DocumentFactory.getInstance().createElement("email",((User)repositoryFile.getRepositoryFile().getOwner()).getEmail()); |
Element outEmail = DocumentFactory.getInstance().createElement("outEmail",((User)repositoryFile.getRepositoryFile().getOwner()).getOutEmail()); |
Element biEmail = DocumentFactory.getInstance().createElement("bi",((User)repositoryFile.getRepositoryFile().getOwner()).getBi()); |
owner.add(oUsername); |
owner.add(oEmail); |
owner.add(outEmail); |
owner.add(biEmail); |
if(repositoryFile.getRepositoryFile().getOwner() instanceof Teacher) |
{ |
Element code = DocumentFactory.getInstance().createElement("teacherCode",""+((Teacher)repositoryFile.getRepositoryFile().getOwner()).getSigesCode()); |
owner.add(code); |
} |
if(repositoryFile.getRepositoryFile().getOwner() instanceof Student) |
{ |
Element code = DocumentFactory.getInstance().createElement("studentCode",""+((Student)repositoryFile.getRepositoryFile().getOwner()).getSigesCode()); |
owner.add(code); |
} |
} |
return dom; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/data/ResourceManager.java |
---|
1,12 → 1,12 |
package pt.estgp.estgweb.services.data; |
import jomm.utils.StreamsUtils; |
import org.dom4j.Document; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.utils.Dom4jUtil; |
import java.io.*; |
import jomm.utils.StreamsUtils; |
import org.apache.log4j.Logger; |
/** |
* @author Jorge Machado |
* @date 28/Mai/2008 |
15,14 → 15,25 |
public class ResourceManager |
{ |
public static final int DOCS_IN_PATH = 1000; |
public static final int DOCS_FIRST_DIR_LEN = 20; |
public static final int DOCS_IN_PATH_LEVEL1 = DOCS_IN_PATH * DOCS_IN_PATH; |
public static final int DOCS_IN_PATH_LEVEL2 = DOCS_IN_PATH * DOCS_IN_PATH * DOCS_IN_PATH; |
public static final int DOCS_FIRST_DIR_LEN = 10; |
public static void saveResource(InputStream stream, String resourcePath, long id) throws IOException |
{ |
StreamsUtils.inputStream2File(stream, new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id))); |
} |
public static void saveResource(Document dom, String resourcePath, long id) throws IOException |
{ |
new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)+".xml").getParentFile().mkdirs(); |
Dom4jUtil.write(dom,Globals.DATA_DIR + resourcePath + getDocumentPathById(id)+".xml"); |
} |
public static InputStream getResource(String resourcePath, long id) throws FileNotFoundException |
{ |
return new FileInputStream(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)); |
49,14 → 60,33 |
public static String getDocumentPathById(long id) |
{ |
char[] dir = new char[DOCS_FIRST_DIR_LEN]; |
setAllChars('0', dir); |
long dirNumber = id / DOCS_IN_PATH; |
dirNumber = dirNumber * DOCS_IN_PATH; |
String dirNumberStr = "" + dirNumber; |
copyCharsToArray(dir, dirNumberStr); |
dirNumberStr = new String(dir); |
return "/" + dirNumberStr + "/" + id; |
char[] dir0 = new char[DOCS_FIRST_DIR_LEN]; |
setAllChars('0', dir0); |
char[] dir1 = new char[DOCS_FIRST_DIR_LEN]; |
setAllChars('0', dir1); |
char[] dir2 = new char[DOCS_FIRST_DIR_LEN]; |
setAllChars('0', dir2); |
long dirNumber0 = id / DOCS_IN_PATH_LEVEL2; |
long dirNumber1 = id / DOCS_IN_PATH_LEVEL1; |
long dirNumber2 = id / DOCS_IN_PATH; |
dirNumber0 = dirNumber0 * DOCS_IN_PATH_LEVEL2; |
dirNumber1 = dirNumber1 * DOCS_IN_PATH_LEVEL1; |
dirNumber2 = dirNumber2 * DOCS_IN_PATH; |
String dirNumberStr0 = "" + dirNumber0; |
String dirNumberStr1 = "" + dirNumber1; |
String dirNumberStr2 = "" + dirNumber2; |
copyCharsToArray(dir0, dirNumberStr0); |
copyCharsToArray(dir1, dirNumberStr1); |
copyCharsToArray(dir2, dirNumberStr2); |
dirNumberStr0 = new String(dir0); |
dirNumberStr1 = new String(dir1); |
dirNumberStr2 = new String(dir2); |
return "/" + dirNumberStr0 + "/" + dirNumberStr1 + "/" + dirNumberStr2 + "/" + id; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryManager.java |
---|
1,6 → 1,7 |
package pt.estgp.estgweb.services.data; |
import org.apache.log4j.Logger; |
import org.dom4j.Document; |
import pt.estgp.estgweb.domain.Image; |
import java.io.ByteArrayInputStream; |
32,6 → 33,20 |
return false; |
} |
public static boolean storeDescription(Document dom, long identifier) |
{ |
try |
{ |
ResourceManager.saveResource(dom, RESOURCE_PATH, identifier); |
return true; |
} |
catch (IOException e) |
{ |
logger.error(e,e); |
} |
return false; |
} |
public static InputStream load(long identifier) |
{ |
try |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/TeacherDaoImpl.java |
---|
3,7 → 3,9 |
import pt.estgp.estgweb.domain.Teacher; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.domain.CourseUnitImpl; |
import pt.estgp.estgweb.domain.TeacherImpl; |
import static org.hibernate.criterion.Restrictions.*; |
import org.hibernate.exception.GenericJDBCException; |
import java.util.List; |
17,6 → 19,10 |
{ |
private TeacherDaoImpl(){} |
// protected Class getReferenceClass() { |
// return TeacherImpl.class; |
// } |
public static TeacherDaoImpl getInstance() |
{ |
if (myInstance == null) |
26,7 → 32,14 |
public Teacher loadBySigesCode(int sigesCode) |
{ |
return (Teacher) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult(); |
try |
{ |
return (Teacher) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult(); |
} |
catch(GenericJDBCException e) |
{ |
throw e; |
} |
} |
public Teacher loadByBi(String bi) |
34,7 → 47,7 |
return (Teacher) createCriteria().add(eq("bi",bi)).uniqueResult(); |
} |
} |