Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1817 → Rev 1824

/branches/v3/impl/conf/WEB-INF/web.xml
12,6 → 12,10
</listener>
-->
<filter>
<filter-name>UrlDisplayFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.UrlDisplayFilter</filter-class>
</filter>
<filter>
<filter-name>CacheControlFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.CacheControlFilter</filter-class>
</filter>
73,6 → 77,10
</filter>
 
<filter-mapping>
<filter-name>UrlDisplayFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/branches/v3/impl/conf/app.properties
352,6 → 352,9
url.stat.ignore.extension.6=.tif
url.stat.ignore.extension.7=.bmp
url.stat.ignore.extension.8=.swf
url.stat.ignore.extension.9=.otf
url.stat.ignore.extension.10=.woff2
url.stat.ignore.extension.10=.ttf
 
url.stat.ignore.prefix.1=/urlstat
url.stat.ignore.prefix.2=/public/
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/HtmlStringUtils.java
New file
0,0 → 1,217
package pt.estgp.estgweb.utils;
 
import java.io.StringWriter;
import java.util.HashMap;
 
/**
* Created by jorgemachado on 16/10/17.
*/
public class HtmlStringUtils {
 
public static final String unescapeHtml3(final String input) {
StringWriter writer = null;
int len = input.length();
int i = 1;
int st = 0;
while (true) {
// look for '&'
while (i < len && input.charAt(i-1) != '&')
i++;
if (i >= len)
break;
 
// found '&', look for ';'
int j = i;
while (j < len && j < i + MAX_ESCAPE + 1 && input.charAt(j) != ';')
j++;
if (j == len || j < i + MIN_ESCAPE || j == i + MAX_ESCAPE + 1) {
i++;
continue;
}
 
// found escape
if (input.charAt(i) == '#') {
// numeric escape
int k = i + 1;
int radix = 10;
 
final char firstChar = input.charAt(k);
if (firstChar == 'x' || firstChar == 'X') {
k++;
radix = 16;
}
 
try {
int entityValue = Integer.parseInt(input.substring(k, j), radix);
 
if (writer == null)
writer = new StringWriter(input.length());
writer.append(input.substring(st, i - 1));
 
if (entityValue > 0xFFFF) {
final char[] chrs = Character.toChars(entityValue);
writer.write(chrs[0]);
writer.write(chrs[1]);
} else {
writer.write(entityValue);
}
 
} catch (NumberFormatException ex) {
i++;
continue;
}
}
else {
// named escape
CharSequence value = lookupMap.get(input.substring(i, j));
if (value == null) {
i++;
continue;
}
 
if (writer == null)
writer = new StringWriter(input.length());
writer.append(input.substring(st, i - 1));
 
writer.append(value);
}
 
// skip escape
st = j + 1;
i = st;
}
 
if (writer != null) {
writer.append(input.substring(st, len));
String inputStr = writer.toString();
String strippedText = inputStr.replaceAll("\\<\\/p\\>", "\n");
strippedText = strippedText.replaceAll("\\<.*?\\>", " ");
return strippedText;
}
String strippedText = input.replaceAll("\\<\\/p\\>", "\n");
strippedText = strippedText.replaceAll("\\<.*?\\>", " ");
return strippedText;
}
 
private static final String[][] ESCAPES = {
{"\"", "quot"}, // " - double-quote
{"&", "amp"}, // & - ampersand
{"<", "lt"}, // < - less-than
{">", "gt"}, // > - greater-than
 
// Mapping to escape ISO-8859-1 characters to their named HTML 3.x equivalents.
{"\u00A0", "nbsp"}, // non-breaking space
{"\u00A1", "iexcl"}, // inverted exclamation mark
{"\u00A2", "cent"}, // cent sign
{"\u00A3", "pound"}, // pound sign
{"\u00A4", "curren"}, // currency sign
{"\u00A5", "yen"}, // yen sign = yuan sign
{"\u00A6", "brvbar"}, // broken bar = broken vertical bar
{"\u00A7", "sect"}, // section sign
{"\u00A8", "uml"}, // diaeresis = spacing diaeresis
{"\u00A9", "copy"}, // © - copyright sign
{"\u00AA", "ordf"}, // feminine ordinal indicator
{"\u00AB", "laquo"}, // left-pointing double angle quotation mark = left pointing guillemet
{"\u00AC", "not"}, // not sign
{"\u00AD", "shy"}, // soft hyphen = discretionary hyphen
{"\u00AE", "reg"}, // ® - registered trademark sign
{"\u00AF", "macr"}, // macron = spacing macron = overline = APL overbar
{"\u00B0", "deg"}, // degree sign
{"\u00B1", "plusmn"}, // plus-minus sign = plus-or-minus sign
{"\u00B2", "sup2"}, // superscript two = superscript digit two = squared
{"\u00B3", "sup3"}, // superscript three = superscript digit three = cubed
{"\u00B4", "acute"}, // acute accent = spacing acute
{"\u00B5", "micro"}, // micro sign
{"\u00B6", "para"}, // pilcrow sign = paragraph sign
{"\u00B7", "middot"}, // middle dot = Georgian comma = Greek middle dot
{"\u00B8", "cedil"}, // cedilla = spacing cedilla
{"\u00B9", "sup1"}, // superscript one = superscript digit one
{"\u00BA", "ordm"}, // masculine ordinal indicator
{"\u00BB", "raquo"}, // right-pointing double angle quotation mark = right pointing guillemet
{"\u00BC", "frac14"}, // vulgar fraction one quarter = fraction one quarter
{"\u00BD", "frac12"}, // vulgar fraction one half = fraction one half
{"\u00BE", "frac34"}, // vulgar fraction three quarters = fraction three quarters
{"\u00BF", "iquest"}, // inverted question mark = turned question mark
{"\u00C0", "Agrave"}, // А - uppercase A, grave accent
{"\u00C1", "Aacute"}, // Б - uppercase A, acute accent
{"\u00C2", "Acirc"}, // В - uppercase A, circumflex accent
{"\u00C3", "Atilde"}, // Г - uppercase A, tilde
{"\u00C4", "Auml"}, // Д - uppercase A, umlaut
{"\u00C5", "Aring"}, // Е - uppercase A, ring
{"\u00C6", "AElig"}, // Ж - uppercase AE
{"\u00C7", "Ccedil"}, // З - uppercase C, cedilla
{"\u00C8", "Egrave"}, // И - uppercase E, grave accent
{"\u00C9", "Eacute"}, // Й - uppercase E, acute accent
{"\u00CA", "Ecirc"}, // К - uppercase E, circumflex accent
{"\u00CB", "Euml"}, // Л - uppercase E, umlaut
{"\u00CC", "Igrave"}, // М - uppercase I, grave accent
{"\u00CD", "Iacute"}, // Н - uppercase I, acute accent
{"\u00CE", "Icirc"}, // О - uppercase I, circumflex accent
{"\u00CF", "Iuml"}, // П - uppercase I, umlaut
{"\u00D0", "ETH"}, // Р - uppercase Eth, Icelandic
{"\u00D1", "Ntilde"}, // С - uppercase N, tilde
{"\u00D2", "Ograve"}, // Т - uppercase O, grave accent
{"\u00D3", "Oacute"}, // У - uppercase O, acute accent
{"\u00D4", "Ocirc"}, // Ф - uppercase O, circumflex accent
{"\u00D5", "Otilde"}, // Х - uppercase O, tilde
{"\u00D6", "Ouml"}, // Ц - uppercase O, umlaut
{"\u00D7", "times"}, // multiplication sign
{"\u00D8", "Oslash"}, // Ш - uppercase O, slash
{"\u00D9", "Ugrave"}, // Щ - uppercase U, grave accent
{"\u00DA", "Uacute"}, // Ъ - uppercase U, acute accent
{"\u00DB", "Ucirc"}, // Ы - uppercase U, circumflex accent
{"\u00DC", "Uuml"}, // Ь - uppercase U, umlaut
{"\u00DD", "Yacute"}, // Э - uppercase Y, acute accent
{"\u00DE", "THORN"}, // Ю - uppercase THORN, Icelandic
{"\u00DF", "szlig"}, // Я - lowercase sharps, German
{"\u00E0", "agrave"}, // а - lowercase a, grave accent
{"\u00E1", "aacute"}, // б - lowercase a, acute accent
{"\u00E2", "acirc"}, // в - lowercase a, circumflex accent
{"\u00E3", "atilde"}, // г - lowercase a, tilde
{"\u00E4", "auml"}, // д - lowercase a, umlaut
{"\u00E5", "aring"}, // е - lowercase a, ring
{"\u00E6", "aelig"}, // ж - lowercase ae
{"\u00E7", "ccedil"}, // з - lowercase c, cedilla
{"\u00E8", "egrave"}, // и - lowercase e, grave accent
{"\u00E9", "eacute"}, // й - lowercase e, acute accent
{"\u00EA", "ecirc"}, // к - lowercase e, circumflex accent
{"\u00EB", "euml"}, // л - lowercase e, umlaut
{"\u00EC", "igrave"}, // м - lowercase i, grave accent
{"\u00ED", "iacute"}, // н - lowercase i, acute accent
{"\u00EE", "icirc"}, // о - lowercase i, circumflex accent
{"\u00EF", "iuml"}, // п - lowercase i, umlaut
{"\u00F0", "eth"}, // р - lowercase eth, Icelandic
{"\u00F1", "ntilde"}, // с - lowercase n, tilde
{"\u00F2", "ograve"}, // т - lowercase o, grave accent
{"\u00F3", "oacute"}, // у - lowercase o, acute accent
{"\u00F4", "ocirc"}, // ф - lowercase o, circumflex accent
{"\u00F5", "otilde"}, // х - lowercase o, tilde
{"\u00F6", "ouml"}, // ц - lowercase o, umlaut
{"\u00F7", "divide"}, // division sign
{"\u00F8", "oslash"}, // ш - lowercase o, slash
{"\u00F9", "ugrave"}, // щ - lowercase u, grave accent
{"\u00FA", "uacute"}, // ъ - lowercase u, acute accent
{"\u00FB", "ucirc"}, // ы - lowercase u, circumflex accent
{"\u00FC", "uuml"}, // ь - lowercase u, umlaut
{"\u00FD", "yacute"}, // э - lowercase y, acute accent
{"\u00FE", "thorn"}, // ю - lowercase thorn, Icelandic
{"\u00FF", "yuml"}, // я - lowercase y, umlaut
};
 
private static final int MIN_ESCAPE = 2;
private static final int MAX_ESCAPE = 6;
 
private static final HashMap<String, CharSequence> lookupMap;
static {
lookupMap = new HashMap<String, CharSequence>();
for (final CharSequence[] seq : ESCAPES)
lookupMap.put(seq[1].toString(), seq[0]);
}
 
public static void main(String[] args)
{
System.out.println(unescapeHtml3("<p>Motiva&ccedil;&atilde;o para a unidade curricular</p>"));
 
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/ReflectionHelper.java
New file
0,0 → 1,124
package pt.estgp.estgweb.utils;
 
import org.reflections.Reflections;
import pt.estgp.estgweb.domain.dao.RoleContainer;
 
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Set;
 
/**
* Created by jorgemachado on 16/10/17.
*/
public class ReflectionHelper {
 
 
public static List<Class<?>> findClassesImpmenenting(final Class<?> interfaceClass, final Package fromPackage) {
 
if (interfaceClass == null) {
System.out.println("Unknown subclass.");
return null;
}
 
if (fromPackage == null) {
System.out.println("Unknown package.");
return null;
}
 
final List<Class<?>> rVal = new ArrayList<Class<?>>();
try {
final Class<?>[] targets = getAllClassesFromPackage(fromPackage.getName());
if (targets != null) {
for (Class<?> aTarget : targets) {
if (aTarget == null) {
continue;
}
else if (aTarget.equals(interfaceClass)) {
System.out.println("Found the interface definition.");
continue;
}
else if (!interfaceClass.isAssignableFrom(aTarget)) {
System.out.println("Class '" + aTarget.getName() + "' is not a " + interfaceClass.getName());
continue;
}
else {
rVal.add(aTarget);
}
}
}
}
catch (ClassNotFoundException e) {
System.out.println("Error reading package name.");
e.printStackTrace();
}
catch (IOException e) {
System.out.println("Error reading classes in package.");
e.printStackTrace();
}
 
return rVal;
}
 
/**
* Load all classes from a package.
*
* @param packageName
* @return
* @throws ClassNotFoundException
* @throws IOException
*/
public static Class[] getAllClassesFromPackage(final String packageName) throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
assert classLoader != null;
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes.toArray(new Class[classes.size()]);
}
 
/**
* Find file in package.
*
* @param directory
* @param packageName
* @return
* @throws ClassNotFoundException
*/
public static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException {
List<Class<?>> classes = new ArrayList<Class<?>>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClasses(file, packageName + "." + file.getName()));
}
else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
}
}
return classes;
}
 
public static void main(String[] args)
{
Reflections reflections = new Reflections("pt.estgp.estgweb");
 
Set<Class<? extends RoleContainer>> subTypes = reflections.getSubTypesOf(RoleContainer.class);
System.out.println("aqui");
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
1193,12 → 1193,12
ReplaceRoleResult result;
if(c.getValidationRole() == null || c.getValidationRole().trim().length() == 0)
{
result = new UserRoleConfigService().addUpdateRole(newUserRoleConfig,userSession);
result = new UserRoleConfigService().addUpdateRole(newUserRoleConfig,userSession,false);
}
else
{
String oldValidationRole = c.getValidationRole();
result = new UserRoleConfigService().updateOldRoleWithView(oldValidationRole, newUserRoleConfig, userSession);
result = new UserRoleConfigService().updateOldRoleWithView(oldValidationRole, newUserRoleConfig, userSession,false);
}
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportSumariesJson.java
11,6 → 11,7
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Aula;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
31,6 → 32,7
import pt.estgp.estgweb.services.sigesimports.oracle.dao.connection.ConnectionManager;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Dom4jUtil;
import pt.estgp.estgweb.utils.HtmlStringUtils;
import pt.estgp.estgweb.web.FtpServer;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
143,7 → 145,7
 
int tries = 3;
//ArrayOfAula arrayOfAulas = null;
ArrayList<pt.estgp.estgweb.services.sigesimports.oracle.domain.Aula> arrayOfAulas = null;
ArrayList<pt.estgp.estgweb.services.sigesimports.oracle.domain.Aula> arrayOfAulas = new ArrayList<Aula>();
while(tries > 0)
{
//comentario de teste
159,8 → 161,16
String msg = "courseUnit:" + cId + " ( " + c.getName() + " ) com sumarios num semestre diferente, atribuido pela administracao do baco: " + semestreEmQueForamCriadosOsSumarios;
logger.info(msg);
serviceLogInfo(msg);
arrayOfAulas = AulaDao.getInstance().loadAulas(institutionCode,year,c.getCode(),semestreEmQueForamCriadosOsSumarios,c.getCourse().getCode(),conn);
}
arrayOfAulas = AulaDao.getInstance().loadAulas(institutionCode,year,c.getCode(),semestreEmQueForamCriadosOsSumarios,c.getCourse().getCode(),conn);
ArrayList<pt.estgp.estgweb.services.sigesimports.oracle.domain.Aula> aulasSemestreUnidade = AulaDao.getInstance().loadAulas(institutionCode,year,c.getCode(),semestre,c.getCourse().getCode(),conn);
if(aulasSemestreUnidade!=null && aulasSemestreUnidade.size() > 0)
{
String msg = "courseUnit:" + cId + " ( " + c.getName() + " ) tem sumarios no semestre da unidade " + semestre;
logger.info(msg);
serviceLogInfo(msg);
arrayOfAulas.addAll(aulasSemestreUnidade);
}
 
break;
}
251,7 → 261,8
s.setTitulo(aula.getSum_titulo());
s.setCodigoDocente(aula.getAula_codigoDocente()+ "");
s.setCdResponsavel(aula.getCodigoResponsavel()+ "");
s.setDescricao(aula.getSum_descricao());
if(aula.getSum_descricao()!= null)
s.setDescricao(HtmlStringUtils.unescapeHtml3(aula.getSum_descricao()));
s.setcEstado(""+aula.getSum_cdEstado().intValue());
s.setNumeroHoras("" + aula.getNumeroCelulas().intValue());
s.setCdTurma(aula.getAula_codigoTurma());
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java
1,8 → 1,10
package pt.estgp.estgweb.services.users;
 
import org.apache.log4j.Logger;
import org.reflections.Reflections;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.RoleContainer;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
11,6 → 13,7
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
 
/**
* Created by jorgemachado on 29/01/16.
55,12 → 58,28
public ReplaceRoleResult updateOldRoleWithView(String oldRole,UserRoleConfigImpl newViewRoleConfig, UserSession sess)
throws AccessDeniedException
{
return updateOldRoleWithView(oldRole, newViewRoleConfig, sess,true);
}
 
public ReplaceRoleResult updateOldRoleWithView(String oldRole,UserRoleConfigImpl newViewRoleConfig, UserSession sess,boolean updateCourses)
throws AccessDeniedException
{
UserRoleConfig oldUserRoleConfig = DaoFactory.getUserRoleConfigDaoImpl().findByRole(oldRole);
newViewRoleConfig.setId(oldUserRoleConfig.getId());
return addUpdateRole(newViewRoleConfig,sess);
if(oldUserRoleConfig == null)
{
return addUpdateRole(newViewRoleConfig,sess,updateCourses);
}
else
{
newViewRoleConfig.setId(oldUserRoleConfig.getId());
return addUpdateRole(newViewRoleConfig,sess,updateCourses);
}
}
 
public ReplaceRoleResult addUpdateRole(UserRoleConfigImpl viewRoleConfig, UserSession sess)
public ReplaceRoleResult addUpdateRole(UserRoleConfigImpl viewRoleConfig, UserSession sess) throws AccessDeniedException {
return addUpdateRole(viewRoleConfig, sess,true);
}
public ReplaceRoleResult addUpdateRole(UserRoleConfigImpl viewRoleConfig, UserSession sess, boolean updateCourseRoles)
throws AccessDeniedException
{
 
70,7 → 89,7
String newRoleStr = viewRoleConfig.getRole().trim();
if(viewRoleConfig.getId() <= 0)
{
replaceRoleResult = replaceOrCreateRoleKey(null, newRoleStr, sess);
replaceRoleResult = replaceOrCreateRoleKey(null, newRoleStr, sess,updateCourseRoles);
if(replaceRoleResult.roleKeyAlreadyExist)
return replaceRoleResult;
persistent = replaceRoleResult.updatedUserRoleConfig;
84,7 → 103,7
{
if(sess.getUser().isSuperuserOrAdmin())
{
replaceRoleResult = replaceOrCreateRoleKey(persistent.getRole(), newRoleStr, sess);
replaceRoleResult = replaceOrCreateRoleKey(persistent.getRole(), newRoleStr, sess,updateCourseRoles);
 
if(replaceRoleResult.roleKeyAlreadyExist)
return replaceRoleResult;
115,6 → 134,18
}
 
 
public static Set<Class<? extends RoleContainer>> roleContainerClasses = null;
private synchronized void init()
{
if(roleContainerClasses == null)
{
Reflections reflections = new Reflections("pt.estgp.estgweb");
 
roleContainerClasses = reflections.getSubTypesOf(RoleContainer.class);
}
}
 
 
/**
* Serviço de nível SUPORTE
* Usado pelo update de Roles e Pela normalização de Roles de Comissões de Curso
127,7 → 158,7
* @return ReplaceRoleResult if roleKeyAlreadyExist = true - nothing was done need to be a none existing new role key
* ReplaceRoleResult.updatedUserRoleConfig tem o role antigo atualizado ou o novo criado com o newRole
*/
public ReplaceRoleResult replaceOrCreateRoleKey(String oldRole, String newRole, UserSession sess)
public ReplaceRoleResult replaceOrCreateRoleKey(String oldRole, String newRole, UserSession sess,boolean updateCourses)
{
ReplaceRoleResult result = new ReplaceRoleResult(newRole);
 
152,39 → 183,33
 
replaceUserRoles(oldRole, newRole, result);
 
replaceCourseRoles(oldRole, newRole, result);
if(updateCourses)
replaceCourseRoles(oldRole, newRole, result);
 
replaceSchoolAndDepartmentRoles(oldRole, newRole, result);
 
replaceEventClasseManagerRoles(oldRole, newRole, result);
init();
for (Class serviceClass : roleContainerClasses) {
System.out.println("Replacing Roles Notification Found: " + serviceClass.getName());
try {
((RoleContainer)serviceClass.newInstance()).replaceRoleNotification(oldRole,newRole,result);
} catch (InstantiationException e) {
logger.error(e,e);
} catch (IllegalAccessException e) {
logger.error(e, e);
}
}
//DaoFactory.getBpmnRoleSelectorDaoImpl().replaceRoleNotification(oldRole, newRole, result);
 
replaceBpmnActorPoolInstancesRoles(oldRole, newRole, result);
//replaceBpmnActorPoolRoles(oldRole, newRole, result);
 
replaceBpmnActorPoolRoles(oldRole, newRole, result);
 
 
}
return result;
}
 
private void replaceBpmnActorPoolInstancesRoles(String oldRole, String newRole, ReplaceRoleResult result) {
List<BpmnActorPoolInstanceImpl> actorPoolInstances = DaoFactory.getBpmnActorPoolInstanceDaoImpl().findByRole(oldRole);
result.afectedActorPoolRolesInstances = actorPoolInstances.size();
for(BpmnActorPoolInstanceImpl actorPoolInstance: actorPoolInstances)
{
actorPoolInstance.replaceRole(oldRole,newRole);
}
}
 
private void replaceBpmnActorPoolRoles(String oldRole, String newRole, ReplaceRoleResult result) {
List<BpmnActorPoolImpl> actorPools = DaoFactory.getBpmnActorPoolDaoImpl().findByRole(oldRole);
result.afectedActorPoolRoles = actorPools.size();
for(BpmnActorPoolImpl actorPool: actorPools)
{
actorPool.replaceRole(oldRole,newRole);
}
}
 
private void replaceEventClasseManagerRoles(String oldRole, String newRole, ReplaceRoleResult result) {
List<EventClass> eventClasses = DaoFactory.getEventClassDaoImpl().findByManagerRole(oldRole);
result.afectedEventClassManagers = eventClasses.size();
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/BpmnActorPoolInstanceDaoImpl.java
1,14 → 1,5
package pt.estgp.estgweb.domain.dao.impl;
 
import pt.estgp.estgweb.domain.BpmnActorPoolInstanceImpl;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.like;
 
/**
* Created by jorgemachado on 23/02/17.
*/
21,19 → 12,4
}
 
 
 
public List<BpmnActorPoolInstanceImpl> findByRole(String role)
{
if(role == null || role.trim().length() == 0)
return new ArrayList<BpmnActorPoolInstanceImpl>();
List<BpmnActorPoolInstanceImpl> pools = createCriteria().add(like("domainRolesTxt", "%" + role + RoleManager.ROLE_SEPARATOR + "%")).list();
Iterator<BpmnActorPoolInstanceImpl> iter = pools.iterator();
while(iter.hasNext())
{
BpmnActorPoolInstanceImpl p = iter.next();
if(!p.hasRole(role))
iter.remove();
}
return pools;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
212,7 → 212,7
 
public List<Course> findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree)
{
return findAllCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode,degree,true);
return findAllCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode,degree,true,false);
}
 
public List<String> findDegrees(String institutionalCode,boolean showWithStudiesPlanActive)
226,15 → 226,18
return q.list();
}
 
public List<Course> findAllCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree,boolean showWithStudiesPlanActive)
public List<Course> findAllCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree,boolean showOnlyWithStudiesPlanActive,boolean showOnlyStatusActive)
{
Criteria c = createCriteria();
c.createAlias("department", "d");
c.createAlias("d.courseSchool","sc");
 
if(showWithStudiesPlanActive)
if(showOnlyWithStudiesPlanActive)
c.add(eq("showStudiesPlan", true));
 
if(showOnlyStatusActive)
c.add(eq("status", true));
 
if (degree != null && degree.length() > 0)
c.add(eq("degree", degree));
 
414,7 → 417,6
/**
* Return only courses if user is from CourseCommission or Coordinator or have role Globals.SERVICES_PROGRAMS_ROLE
* otherwise return null;
* @param importYear
* @param u
* @return
*/
507,7 → 509,7
public static void main(String[] args) throws SQLException {
AbstractDao.getCurrentSession().beginTransaction();
List t2 = new CourseDaoImpl().findDegrees("1",true);
List t = new CourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit("1", "L", true);
List t = new CourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit("1", "L", true,true);
t2 = new CourseDaoImpl().findAllOrderByName("201516","td","L","1");
 
System.out.println(t.size());
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/BpmnRoleSelectorDaoImpl.java
New file
0,0 → 1,53
package pt.estgp.estgweb.domain.dao.impl;
 
import pt.estgp.estgweb.domain.BpmnRoleSelectorImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.RoleContainer;
import pt.estgp.estgweb.services.users.ReplaceRoleResult;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.like;
 
/**
* Created by jorgemachado on 23/02/17.
*/
public class BpmnRoleSelectorDaoImpl extends BpmnRoleSelectorDao implements RoleContainer
{
public static BpmnRoleSelectorDaoImpl getInstance() {
if (myInstance == null)
myInstance = new BpmnRoleSelectorDaoImpl();
return (BpmnRoleSelectorDaoImpl) myInstance;
}
 
 
 
public List<BpmnRoleSelectorImpl> findByRole(String role)
{
if(role == null || role.trim().length() == 0)
return new ArrayList<BpmnRoleSelectorImpl>();
List<BpmnRoleSelectorImpl> roleSelectors = createCriteria().add(like("role", "%" + role + RoleManager.ROLE_SEPARATOR + "%")).list();
Iterator<BpmnRoleSelectorImpl> iter = roleSelectors.iterator();
while(iter.hasNext())
{
BpmnRoleSelectorImpl p = iter.next();
if(!p.hasRole(role))
iter.remove();
}
return roleSelectors;
}
 
public void replaceRoleNotification(String oldRole, String newRole, ReplaceRoleResult result) {
 
 
List<BpmnRoleSelectorImpl> bpmnRoleSelectors = DaoFactory.getBpmnRoleSelectorDaoImpl().findByRole(oldRole);
result.afectedActorPoolRolesInstances = bpmnRoleSelectors.size();
for(BpmnRoleSelectorImpl bpmnRoleSelector: bpmnRoleSelectors)
{
bpmnRoleSelector.replaceRole(oldRole,newRole);
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/RoleContainer.java
New file
0,0 → 1,11
package pt.estgp.estgweb.domain.dao;
 
import pt.estgp.estgweb.services.users.ReplaceRoleResult;
 
/**
* Created by jorgemachado on 16/10/17.
*/
public interface RoleContainer
{
public void replaceRoleNotification(String oldRole, String newRole, ReplaceRoleResult result);
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java
615,4 → 615,8
public static BpmnFlowComponentDao getBpmnFlowComponentDaoImpl() {
return BpmnFlowComponentDao.getInstance();
}
 
public static BpmnRoleSelectorDaoImpl getBpmnRoleSelectorDaoImpl() {
return BpmnRoleSelectorDaoImpl.getInstance();
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/TeacherImpl.java
314,6 → 314,7
*
* @return all roles type course comission from user roles and validationRoles from coordinated courses
* where user is main coordinator
* APENAS CURSOS ATIVOS STATUS = TRUE
*/
public List<String> obtainCourseComissionsAndCoordinationsRoles()
{
325,12 → 326,17
}
for(Course coordinated : getCoordinatorCourses())
{
if(coordinated.getValidationRole() != null && coordinated.getValidationRole().trim().length() > 0)
if(coordinated.isStatus() && coordinated.getValidationRole() != null && coordinated.getValidationRole().trim().length() > 0)
{
if(!comissionsRoles.contains(coordinated.getValidationRole()))
comissionsRoles.add(coordinated.getValidationRole());
}
}
//System.out.println("Roles for: " + getName());
/*for(String role: comissionsRoles)
{
System.out.println(role);
}*/
return comissionsRoles;
}
 
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/BpmnRoleSelectorImpl.java
1,7 → 1,38
package pt.estgp.estgweb.domain;
 
import pt.estgp.estgweb.utils.RoleManager;
 
/**
* Created by jorgemachado on 13/06/17.
*/
public class BpmnRoleSelectorImpl extends BpmnRoleSelector {
public class BpmnRoleSelectorImpl extends BpmnRoleSelector
{
public boolean hasRole(String r)
{
if(getRole()!=null)
return RoleManager.hasRole(RoleManager.getRolesFromSerial(getRole()), r);
return false;
/*
if (r == null || getSelectorRole() == null || getSelectorRole().getRoles() == null || getSelectorRole().getRoles().size() == 0)
return false;
for (DomainRoleProxy role : getSelectorRole().getRoles())
{
if (role.getRole().equals(r))
return true;
}
return false;
*/
}
 
public void replaceRole(String oldRole,String newRole)
{
 
if (oldRole == null || newRole == null)
return;
 
String role = RoleManager.removeRole(getRole(),oldRole);
setRole(RoleManager.addRole(role,newRole));
 
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/filters/AccessLogger.java
1,12 → 1,13
package pt.estgp.estgweb.filters.filters;
import java.util.Date;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.filters.chains.LoggingFilter;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.estgp.estgweb.filters.chains.LoggingFilter;
import org.apache.log4j.Logger;
 
import java.util.Date;
 
public class AccessLogger extends LoggingFilter
{
private static final Logger logger = Logger.getLogger(AccessLogger.class);
15,6 → 16,6
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
logger.info("Mr." + request.getRequester() + " accessed "+ request.getService()+ " at " + new Date(System.currentTimeMillis()));
logger.info("Mr." + request.getRequester() + " accessed "+ request.getService()+ " at " + new Date(System.currentTimeMillis()) + " - " + request.getMethodName());
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/filters/UserSessionFilter.java
102,7 → 102,7
if(userSession == null)
{
dummy = true;
System.out.println("Creating dummy UserSession");
logger.warn("Creating dummy UserSession: " + request.getRemoteAddr() + " : " + request.getRemoteHost() + " : " + request.getRemotePort());
userSession = new UserSessionImpl();//creating a dummy there is no cookie
request.setAttribute(Globals.USER_SESSION_KEY,userSession);
userSession.setIpAddress(request.getRemoteAddr() + " : " + request.getRemoteHost() + " : " + request.getRemotePort());
/branches/v3/impl/src/java/pt/estgp/estgweb/web/filters/UrlDisplayFilter.java
New file
0,0 → 1,58
package pt.estgp.estgweb.web.filters;
 
/**
* Created by jorgemachado on 24/05/16.
*/
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.utils.Globals;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
 
public class UrlDisplayFilter implements Filter {
 
private static Logger logger = Logger.getLogger(UrlDisplayFilter.class);
public static final List<String> URL_STAT_IGNORE_EXTENSIONS = Globals.URL_STAT_IGNORE_EXTENSIONS;
 
@Override
public void init(FilterConfig filterConfig) throws ServletException {
 
}
 
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
 
HttpServletRequest req = (HttpServletRequest) request;
String relativePath = req.getServletPath();
if (relativePath == null)
relativePath = "";
 
if (req.getPathInfo() != null && req.getPathInfo().length() > 0)
{
relativePath += req.getPathInfo();
}
 
for (String ignore : URL_STAT_IGNORE_EXTENSIONS)
{
if (relativePath.endsWith(ignore))
{
chain.doFilter(request, response);
return;
}
}
 
//String sessId = req.getSession() != null ? req.getSession().getId() : " no session ";
 
logger.info("url[" + req.getRequestURL().toString() + "] reqSessionId[" + req.getRequestedSessionId() + "] servletPath[" + req.getServletPath() + "] ip[" + req.getRemoteAddr() + "]");
chain.doFilter(request, response);
}
 
@Override
public void destroy() {
 
}
 
}
/branches/v3/impl/src/java/pt/utl/ist/berserk/logic/serviceManager/TransactionalServiceInvoker.java
83,6 → 83,14
{
System.out.println("THREAD:" + Thread.currentThread().getId() + "AVISO : ESTA A CHAMAR UM SERVICO TRANSACIONAL DENTRO DE UMA TRANSACAO, VAMOS MANTER A MESMA TRASACAO");
System.out.println(">>>>>>TRANSACTION WARNING BUT NO PROBLEM: AVISO: Já existia uma transação activa e foi iniciada outra neste momento sem fechar a anterior ");
System.out.println("Servico chamado: " + service.getClass().getName());
System.out.println("Metodo chamado: " + methodName);
System.out.println("Requester: " + requester);
System.out.println("Arguments: " + arguments);
System.out.println("ArgNames: " + names);
 
 
 
for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
System.out.println("\t" + ste);
}
/branches/v3/impl/src/web/layout/headerTools.jsp
5,7 → 5,7
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib prefix="baco" uri="http://www.estgp.pt/baco/" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<%--Esta declaracao tem de estar antes das proximas que sao dependentes desta--%>
<script>
var GLOBAL_BacoAngularAppDependencies = [];
/branches/v3/impl/src/web/user/courses/courseReportTools.jsp
30,6 → 30,8
request.setAttribute("importYear",importYear);
for(Course course: courses)
{
if(course.isStatus())
{
request.setAttribute("course",course);
%>
<div class="col-md-6">
37,7 → 39,9
<span class="glyphicon glyphicon-wrench"></span> ${course.code} - <bean:message key="course.${course.degree}"/> - ${course.name}
</html:link>
</div>
 
<%
}
}
 
AbstractDao.getCurrentSession().getTransaction().commit();
/branches/v3/impl/src/web/user/courseunits/courseCourseunitsStatistics.jsp
23,9 → 23,10
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSessionImpl" scope="request"/>
 
<%
AbstractDao.getCurrentSession().beginTransaction();
String all = request.getParameter("all");
String importYear = request.getParameter("importYear");
AbstractDao.getCurrentSession().beginTransaction();
//AbstractDao.getCurrentSession().beginTransaction();
if(importYear == null)
importYear = UserSession.getNowConfiguration().getInterfaceImportYear();
 
42,9 → 43,9
if(UserSession.getUser().isSuperuserOrAdmin() || UserSession.getUser().hasRole(Globals.SERVICES_PROGRAMS_ROLE) || UserSession.getUser().hasRole("services"))
{
allCourses = true;
AbstractDao.getCurrentSession().beginTransaction();
 
 
 
Criteria c = AbstractDao.getCurrentSession().createCriteria(CourseUnit.class)
.setProjection(Projections.projectionList().add(Projections.groupProperty("c.validationRole"))
.add(Projections.property("c.id")).add(Projections.property("c.name")).add(Projections.property("c.code")))
52,7 → 53,7
//.add(eq("importYear", importYear))
;
List<Object[]> validationRoles = c.list();
AbstractDao.getCurrentSession().getTransaction().commit();
 
comissionsRoles = new ArrayList<String>();
 
%>
92,9 → 93,9
%>
</div>
<%
}
else
{
}
else
{
 
User persistentUser = DaoFactory.getUserDaoImpl().narrow(DaoFactory.getUserDaoImpl().get(UserSession.getUser().getId()));
comissionsRoles = new ArrayList<String>();
147,8 → 148,8
<%
try
{
AbstractDao.getCurrentSession().beginTransaction();
 
 
if(all == null)
{
%>
225,6 → 226,7
.add(Projections.property("c.name"))
.add(Projections.property("c.code")))
.createAlias("course", "c")
.add(eq("c.status", true))
.add(eq("importYear", importYear))
.add(eq("c.validationRole", roleCourse));
List<Object[]> coursesForRole = c.list();
339,6 → 341,7
<td><button class="btn btn-default" data-href="<%=request.getContextPath()%>/user/courseunits/statsAjax.jsp?courseUnitId=${cu.id}" data-title="Estatisticas da Unidade ${cu.name} (${cu.code})" data-toggle="modal" data-target="#modalAjaxRequest"><span class="glyphicon glyphicon-zoom-in"/></button> </td>
</tr>
<%
AbstractDao.getCurrentSession().evict(cu);
}
 
if(all == null)
369,7 → 372,7
</table>
<%
}
AbstractDao.getCurrentSession().getTransaction().commit();
 
}
catch(Exception e)
{
/branches/v3/impl/src/web/user/profile/rolesCoordenacoes.jsp
13,6 → 13,7
<%
boolean showAllCourses = request.getParameter("showAllCourses") != null ? Boolean.parseBoolean(request.getParameter("showAllCourses")) : false;
boolean showWithStudiesPlanActive = ! showAllCourses;
boolean showStatusActive = !showAllCourses;
List<String> institutionCodes = ConfigProperties.getListValues("institution.code.prefix.inverse.");
%>
<script>
53,7 → 54,7
}
</script>
 
<p>Nesta listagem apenas são mostrados os Cursos publicos no Site do IPP, se o curso que procura não está listado clique aqui para ver todos <a class="btn btn-default" href="<%=request.getContextPath()%>/user/showRoleUsers.do?showAllCourses=true#comissoes">Mostrar Todos</a></p>
<p>Nesta listagem apenas são mostrados os Cursos ativos no PAE, se o curso que procura não está listado clique aqui para ver todos <a class="btn btn-default" href="<%=request.getContextPath()%>/user/showRoleUsers.do?showAllCourses=true#comissoes">Mostrar Todos</a></p>
 
 
<!--TBS DE INSTITUICAO-->
106,7 → 107,7
 
<div class="degree" id="degree<%=degree%>" style="display: none">
<%
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit(instCode,degree,showWithStudiesPlanActive);
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit( instCode,degree,false,showStatusActive);
for(Course course: courses)
{
request.setAttribute("course",course);
182,6 → 183,9
<div class="web-messages"> </div>
</div>
</div>
<div>
<p>Activo: ${course.status} / Visivel no Site IPP: ${course.showStudiesPlan}</p>
</div>
<div class="col-md-6">
<baco:hasRole role="admin,all,servicesRolesManagement,servicesCoursesManagement,services">
<bacoTags:searchUserTab callbackFunction="mudarCoordenador${course.id}" title="Procurar novo coordenador" useModals="true"/>
/branches/v3/impl/src/web/user/repositoryDocuments/adminImportTools.jsp
9,7 → 9,7
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>
<%@ taglib prefix="html" uri="/WEB-INF/tlds/struts-html.tld" %>
<%@ taglib prefix="bean" uri="/WEB-INF/tlds/struts-bean.tld" %>
<%@ taglib prefix="baco" uri="http://www.estgp.pt/baco/" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<baco:hasNotRole role="admin,all">
<div class="web-messages">
<div class="alert alert-warning">Esta funcionalidade só pode ser utilizada por admnistradores</div>
/branches/v3/impl/src/web/user/repositoryDocuments/showInterface.jsp
22,7 → 22,7
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="bacoTags" %>
<%@ taglib prefix="baco" uri="http://www.estgp.pt/baco/" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String slugOrId = (String) request.getAttribute("slug");
/branches/v3/impl/src/web/user/contacts/listCourseComissionStudents.jsp
65,7 → 65,7
.add(Projections.property("course.code")))
.createAlias("subscribedUnits", "su")
.createAlias("su.course", "course")
.add(eq("su.importYear", "201516"))
.add(eq("su.importYear", UserSession.getNowConfiguration().getInterfaceImportYear()))
.add(eq("course.validationRole", roleCourse))
;
c.addOrder(Order.asc("name"));
/branches/v3/impl/libs.xml
120,6 → 120,10
<include name="**/*.jar"/>
</fileset>
 
<fileset dir="${common.lib.dir}/reflections">
<include name="**/*.jar"/>
</fileset>
 
</path>
 
<path id="pathToAntLibs">
/branches/v3/impl/build.xml
311,6 → 311,11
<include name="**/*.jar"/>
</fileset>
 
<fileset dir="${common.lib.dir}/reflections">
<include name="**/*.jar"/>
</fileset>
 
 
</copy>
<copy file="${dist.dir}/estgweb.jar" todir="${build.dir.war}/WEB-INF/lib"/>
<copy todir="${build.dir.war}/WEB-INF" overwrite="true">
/branches/v3/impl/etc/jvmconfig/JVM_MANAGE.txt
New file
0,0 → 1,44
 
jps
ver o processo do Bootstrap se for o 14667 por exemplo colocar
 
jstat -gcutil 14677
 
-gcutil Option
Summary of Garbage Collection Statistics
Column Description
S0 Survivor space 0 utilization as a percentage of the space's current capacity.
S1 Survivor space 1 utilization as a percentage of the space's current capacity.
E Eden space utilization as a percentage of the space's current capacity.
O Old space utilization as a percentage of the space's current capacity.
P Permanent space utilization as a percentage of the space's current capacity.
YGC Number of young generation GC events.
YGCT Young generation garbage collection time.
FGC Number of full GC events.
FGCT Full garbage collection time.
GCT Total garbage collection time.
 
 
Isto vai ler o historico das classes criadas em tempo real no sistema e a memoria ocupada
31849 >> processo
jmap -histo -F 31849
 
 
 
Pagina de Gestão de Memória
https://stackoverflow.com/questions/11339679/100-full-eden-space-0-used-survivor-space-garbage-collection-not-done
 
 
-XX:NewRatio=3 - the young generation will occupy 1/4 the overall heap
-XX:NewSize - Calculated automatically if you specify -XX:NewRatio
-XX:MaxNewSize - The largest size the young generation can grow to (unlimited if this value is not specified at command line)
-XX:SurvivorRatio=6
 
no tomcat so funcionou o 1 e o 4 comando
 
 
https://docs.oracle.com/cd/E19900-01/819-4742/abeik/index.html
 
 
conf do tomcat do Baco
export CATALINA_OPTS="-Dfile.encoding=UTF-8 -Xmx2048m -Xms2048m -XX:PermSize=256m -XX:MaxPermSize=256m -server -XX:NewRatio=3 -XX:SurvivorRatio=6"
/branches/v3/common/reflections/guava-15.0.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/common/reflections/annotations-2.0.1.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/common/reflections/javassist-3.19.0-GA.notNeeded
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/common/reflections/reflections-0.9.10.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream