Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 89 → Rev 90

/impl/conf/language/MessageResourcesEvents.properties
3,4 → 3,4
# EVENTS MESSAGE RESOURCES
#
################################################################################
 
module.Events=Eventos
/impl/conf/language/MessageResourcesAnnouncements.properties
3,6 → 3,7
# ANNOUNCEMENTS MESSAGE RESOURCES
#
################################################################################
module.Announcements=Anúncios
 
announcement.title=Titulo
announcement.text=Texto
/impl/conf/language/MessageResources.properties
240,5 → 240,5
 
 
 
module.Proxy=Proxy
 
 
/impl/conf/language/MessageResourcesBlog.properties
3,7 → 3,7
# ANNOUNCEMENTS MESSAGE RESOURCES
#
################################################################################
 
module.Blogs=Blogs
blog.title=Titulo
blog.description=Descrição
blog.image=Imagem
/impl/conf/WEB-INF/struts/struts-blog.xml
7,7 → 7,7
<struts-config>
 
<form-beans>
<form-bean type="pt.estgp.estgweb.web.form.blog.BlogForm" name="BlogForm"/>
<form-bean type="pt.estgp.estgweb.web.form.blogs.BlogForm" name="BlogForm"/>
</form-beans>
 
<global-exceptions>
24,7 → 24,7
<!--Authentication-->
<action path="/startSubmitBlog" forward="/loadBlog.do?dispatch=start"/>
<action path="/submitBlog"
type="pt.estgp.estgweb.web.controllers.blog.BlogController"
type="pt.estgp.estgweb.web.controllers.blogs.BlogsController"
name="BlogForm"
scope="request"
parameter="dispatch"
33,7 → 33,7
<forward name="success" path="page.load.blog"/>
</action>
<action path="/loadBlog"
type="pt.estgp.estgweb.web.controllers.blog.BlogController"
type="pt.estgp.estgweb.web.controllers.blogs.BlogsController"
name="BlogForm"
scope="request"
parameter="dispatch"
/impl/conf/WEB-INF/struts/tiles-blog.xml
9,13 → 9,13
 
<definition name="page.submit.blog" extends="base.layout1">
<put name="title" value="Create a Blog"/>
<put name="topnav" value="/admin/blog/topnavCreateBlog.jsp"/>
<put name="body" value="/admin/blog/submitBlog.jsp"/>
<put name="topnav" value="/admin/blogs/topnavCreateBlog.jsp"/>
<put name="body" value="/admin/blogs/submitBlog.jsp"/>
</definition>
 
<definition name="page.load.blog" extends="base.layout1">
<put name="title" value="Create a Blog"/>
<put name="body" value="/public/blog/blog.jsp"/>
<put name="body" value="/public/blogs/blog.jsp"/>
</definition>
 
</tiles-definitions>
/impl/conf/app.properties
130,8 → 130,11
urlstat.chart.year.months=MMM-yy
urlstat.chart.two.years.months=MMM-yy
 
#########################################################################
# Common Services
#
search.max.results=10
 
 
 
 
 
/impl/conf/berserk/sd.xml
179,7 → 179,7
<!--BLOGS-->
<service>
<name>CreateBlog</name>
<implementationClass>pt.estgp.estgweb.services.blog.CreateBlogService</implementationClass>
<implementationClass>pt.estgp.estgweb.services.blogs.CreateBlogService</implementationClass>
<description>Create a Blog</description>
<isTransactional>true</isTransactional>
<filterChains>
190,7 → 190,7
</service>
<service>
<name>LoadBlog</name>
<implementationClass>pt.estgp.estgweb.services.blog.LoadBlogService</implementationClass>
<implementationClass>pt.estgp.estgweb.services.blogs.LoadBlogService</implementationClass>
<description>Load a Blog</description>
<isTransactional>true</isTransactional>
<filterChains>
199,4 → 199,29
</filterChains>
</service>
 
 
<!--CommonServices-->
<service>
<name>AnnouncementsCommonServices</name>
<implementationClass>pt.estgp.estgweb.services.announcements.AnnouncementsCommonServices</implementationClass>
<description>Common Services For Announcements</description>
<defaultMethod>search</defaultMethod>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>BlogsCommonServices</name>
<implementationClass>pt.estgp.estgweb.services.blogs.BlogsCommonServices</implementationClass>
<description>Common Services For Blogs</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
 
 
</serviceDefinitions>
/impl/src/java/pt/estgp/estgweb/Globals.java
13,7 → 13,8
public class Globals
{
 
public static final String ALL_ROLE = ConfigProperties.getProperty("user.super");;
public static final int SEARCH_MAX_RESULTS = ConfigProperties.getIntProperty("search.max.results");
public static final String ALL_ROLE = ConfigProperties.getProperty("user.super");
public static final String ACTUAL_RELATIVE_PATH = "ACTUAL_RELATIVE_PATH";
public static final String ADMIN_ROLE = ConfigProperties.getProperty("user.admin");
public static final String SUPER_USER_ROLE = ConfigProperties.getProperty("user.super");
/impl/src/java/pt/estgp/estgweb/services/blogs/BlogsCommonServices.java
New file
0,0 → 1,46
package pt.estgp.estgweb.services.blogs;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.common.IModuleCommonServices;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.services.common.IToDoCat;
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.estgp.estgweb.services.announcements.AnnouncementsCommonServices;
import pt.estgp.estgweb.domain.UserSession;
import org.apache.log4j.Logger;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class BlogsCommonServices implements IService, IModuleCommonServices
{
private static final Logger logger = Logger.getLogger(BlogsCommonServices.class);
 
 
public int countSearch(String search, SearchTypeEnum searchType, UserSession userSession) {
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
 
public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
 
public int countToDo(UserSession userSession) {
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
 
public IToDoCat getToDo(UserSession userSession) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
}
/impl/src/java/pt/estgp/estgweb/services/blogs/LoadBlogService.java
New file
0,0 → 1,34
package pt.estgp.estgweb.services.blogs;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import org.apache.log4j.Logger;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class LoadBlogService implements IService
{
 
private static final Logger logger = Logger.getLogger(LoadBlogService.class);
 
public BlogView run(Long id, UserSession userSession) throws ServiceException
{
DaoFactory.getBlogDaoImpl().get(id);
return new BlogView(DaoFactory.getBlogDaoImpl().get(id));
}
}
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogService.java
New file
0,0 → 1,41
package pt.estgp.estgweb.services.blogs;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
 
import java.util.Date;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class CreateBlogService implements IService
{
private static final Logger logger = Logger.getLogger(CreateBlogService.class);
 
public BlogView run(Blog b, UserSession userSession) throws ServiceException
{
if(b.getTargetRoles() == null || b.getTargetRoles().length() == 0)
b.setTargetRoles(Globals.ALL_ROLE);
b.setOwner(userSession.getUser());
b.setSaveDate(new Date());
DaoFactory.getBlogDaoImpl().save(b);
return new BlogView(b);
}
}
/impl/src/java/pt/estgp/estgweb/services/common/ISearchResults.java
New file
0,0 → 1,16
package pt.estgp.estgweb.services.common;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 14:57:52
* @see pt.estgp.estgweb.services.common
*/
public interface ISearchResults
{
public ModuleEnum getModule();
public List<IResult> getResults();
public int getTotalResults();
}
/impl/src/java/pt/estgp/estgweb/services/common/impl/CommonSearchResults.java
New file
0,0 → 1,45
package pt.estgp.estgweb.services.common.impl;
 
import pt.estgp.estgweb.services.common.ICommonSearchResults;
import pt.estgp.estgweb.services.common.ISearchResults;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 15:51:32
* @see pt.estgp.estgweb.services.common.impl
*/
public class CommonSearchResults implements ICommonSearchResults
{
 
private List<ISearchResults> results;
private int totalResults = 0;
 
public List<ISearchResults> getSearchResults()
{
return results;
}
 
public int getTotalResults()
{
return totalResults;
}
 
public void setResults(List<ISearchResults> results)
{
this.results = results;
}
 
public void setTotalResults(int totalResults)
{
this.totalResults = totalResults;
}
 
public void addMoreResults(int totalResults)
{
this.totalResults += totalResults;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/impl/DefaultToDoCat.java
New file
0,0 → 1,32
package pt.estgp.estgweb.services.common.impl;
 
import pt.estgp.estgweb.services.common.IToDoCat;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 16:16:52
* @see pt.estgp.estgweb.services.common.impl
*/
public class DefaultToDoCat implements IToDoCat
{
private String url;
private int totalToDo;
 
 
public String getUrl() {
return url;
}
 
public void setUrl(String url) {
this.url = url;
}
 
public int getTotalToDo() {
return totalToDo;
}
 
public void setTotalToDo(int totalToDo) {
this.totalToDo = totalToDo;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/impl/DefaultResult.java
New file
0,0 → 1,63
package pt.estgp.estgweb.services.common.impl;
 
import pt.estgp.estgweb.services.common.IResult;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 16:13:08
* @see pt.estgp.estgweb.services.common.impl
*/
public class DefaultResult implements IResult
{
 
private String title;
private String subTitle;
private String bestFragments;
private String text;
private String url;
 
 
public DefaultResult() {
}
 
public void setTitle(String title) {
this.title = title;
}
 
public void setUrl(String url) {
this.url = url;
}
 
public void setText(String text) {
this.text = text;
}
 
public void setBestFragments(String bestFragments) {
this.bestFragments = bestFragments;
}
 
public String getTitle() {
return title;
}
 
public String getSubTitle() {
return subTitle;
}
 
public void setSubTitle(String subTitle) {
this.subTitle = subTitle;
}
 
public String getBestFragments() {
return bestFragments;
}
 
public String getText() {
return text;
}
 
public String getUrl() {
return url;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/impl/DefaultSearchResults.java
New file
0,0 → 1,57
package pt.estgp.estgweb.services.common.impl;
 
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.estgp.estgweb.services.common.ModuleEnum;
import pt.estgp.estgweb.services.common.IResult;
 
import java.util.List;
import java.util.ArrayList;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 16:15:32
* @see pt.estgp.estgweb.services.common.impl
*/
public class DefaultSearchResults implements ISearchResults
{
private ModuleEnum module;
private List<IResult> results;
private int totalResults;
 
 
public ModuleEnum getModule() {
return module;
}
 
public void setModule(ModuleEnum module) {
this.module = module;
}
 
public List<IResult> getResults() {
return results;
}
 
public void setResults(List<IResult> results) {
this.results = results;
if(results != null)
this.totalResults = results.size();
else
this.totalResults = 0;
}
 
public int getTotalResults() {
return totalResults;
}
 
public void addResult(IResult result)
{
if(result != null)
totalResults++;
if(results == null)
results = new ArrayList<IResult>();
results.add(result);
}
 
 
}
/impl/src/java/pt/estgp/estgweb/services/common/IToDoCat.java
New file
0,0 → 1,13
package pt.estgp.estgweb.services.common;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 15:00:05
* @see pt.estgp.estgweb.services.common
*/
public interface IToDoCat
{
public String getUrl();
public int getTotalToDo();
}
/impl/src/java/pt/estgp/estgweb/services/common/CommonServicesManager.java
New file
0,0 → 1,213
package pt.estgp.estgweb.services.common;
 
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.common.impl.CommonSearchResults;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.*;
 
import java.util.List;
import java.util.ArrayList;
 
import org.apache.log4j.Logger;
 
import javax.servlet.http.HttpServletRequest;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 14:55:22
* @see pt.estgp.estgweb.services.common
*/
public class CommonServicesManager {
 
 
private static final Logger logger = Logger.getLogger(CommonServicesManager.class);
 
private static CommonServicesManager ourInstance = new CommonServicesManager();
 
public static CommonServicesManager getInstance() {
return ourInstance;
}
 
private CommonServicesManager() {
}
 
/**
* @param request asking
* @param query to execute
* @param searchType see SearchTypeEnum
* @return Cluster of Results for each Module with total module results, only return modules with results
* @throws Throwable on notAuthorized or internal error
*/
public ICommonSearchResults search(HttpServletRequest request, String query, SearchTypeEnum searchType) throws Throwable {
return search(RequestUtils.getRequester(request), query, searchType);
}
 
/**
* @param requester asking
* @param query to execute
* @param searchType see SearchTypeEnum
* @return Cluster of Results for each Module with total module results, only return modules with results
* @throws Throwable on notAuthorized or internal error
*/
public ICommonSearchResults search(String requester, String query, SearchTypeEnum searchType) throws Throwable {
 
CommonSearchResults commonSearchResults = new CommonSearchResults();
List<ISearchResults> results = new ArrayList<ISearchResults>();
 
for (ModuleEnum module : ModuleEnum.values()) {
if (module.getServiceName() != null) {
ISearchResults iSearchResults = search(requester, query, searchType, module, 0);
if (iSearchResults.getTotalResults() > 0) {
results.add(iSearchResults);
commonSearchResults.addMoreResults(iSearchResults.getTotalResults());
}
}
}
commonSearchResults.setResults(results);
return commonSearchResults;
}
 
/**
* The service called inside implements method
* <p/>
* public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession);
*
* @param request asking
* @param query to execute
* @param searchType see SearchTypeEnum
* @param moduleKey to search in
* @param page of start result
* @return searchResults
* @throws Throwable on not authorized and internal error
*/
 
public ISearchResults search(HttpServletRequest request, String query, SearchTypeEnum searchType, String moduleKey, int page) throws Throwable {
return search(RequestUtils.getRequester(request), query, searchType, ModuleEnum.parse(moduleKey), page);
}
 
/**
* The service called inside implements method
* <p/>
* public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession);
*
* @param requester asking
* @param query to execute
* @param searchType see SearchTypeEnum
* @param moduleKey to search in
* @param page of start result
* @return searchResults
* @throws Throwable on not authorized and internal error
*/
 
public ISearchResults search(String requester, String query, SearchTypeEnum searchType, String moduleKey, int page) throws Throwable {
return search(requester, query, searchType, ModuleEnum.parse(moduleKey), page);
}
 
/**
* The service called inside implements method
* <p/>
* public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession);
*
* @param requester asking
* @param query to execute
* @param searchType see SearchTypeEnum
* @param moduleKey to search in
* @param page of start result
* @return searchResults
* @throws Throwable on not authorized and internal error
*/
public ISearchResults search(String requester, String query, SearchTypeEnum searchType, ModuleEnum moduleKey, int page) throws Throwable {
IServiceManager sm;
try {
sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{query, searchType, page, Globals.SEARCH_MAX_RESULTS};
return (ISearchResults) sm.execute(requester, moduleKey.getServiceName(), "search", args, names);
}
catch (FilterRetrieveException e) {
logger.error(e, e);
throw new NotAuthorizedException(e.toString());
}
catch (Throwable e) {
logger.error(e, e);
throw e;
}
}
 
public List<IToDoCat> getToDoCats(String requester) throws Throwable {
List<IToDoCat> toDoCats = new ArrayList<IToDoCat>();
 
for (ModuleEnum module : ModuleEnum.values()) {
if (module.getServiceName() != null) {
IToDoCat toDoCat = getToDoCats(requester, module);
if (toDoCat != null) {
toDoCats.add(toDoCat);
 
}
}
}
return toDoCats;
}
 
public IToDoCat getToDoCats(HttpServletRequest request, String moduleKey) throws Throwable {
return getToDoCats(RequestUtils.getRequester(request), ModuleEnum.parse(moduleKey));
}
 
public IToDoCat getToDoCats(HttpServletRequest request, ModuleEnum module) throws Throwable {
return getToDoCats(RequestUtils.getRequester(request), module);
}
 
/**
*
* @param requester asking
* @param module to search
* @return Number of ToDos in given module
* @throws Throwable on Error or NotAuthorized Exception
*/
public IToDoCat getToDoCats(String requester, ModuleEnum module) throws Throwable {
IServiceManager sm;
try {
sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
return (IToDoCat) sm.execute(requester, module.getServiceName(), "getToDo", args, names);
}
catch (FilterRetrieveException e) {
logger.error(e, e);
throw new NotAuthorizedException(e.toString());
}
catch (Throwable e) {
logger.error(e, e);
throw e;
}
}
 
 
public static void main(String[] args) throws Throwable
{
ICommonSearchResults commonSearchResults = new CommonServicesManager().search("18D0D23A7C07FF478CE8DAFEBA58D37A","teste",SearchTypeEnum.AllWords);
for(ISearchResults searchResults: commonSearchResults.getSearchResults())
{
System.out.println("-----------------------------------------------------");
System.out.println("Module" + searchResults.getModule().getMessageKey());
for(IResult result: searchResults.getResults())
{
System.out.println("");
System.out.println("\ttitle:" +result.getTitle());
System.out.println("\tsubTitle:" +result.getSubTitle());
System.out.println("\ttext:" +result.getText());
System.out.println("\turl:" + result.getUrl());
System.out.println("\tbestFragments:" + result.getBestFragments());
}
}
}
 
}
/impl/src/java/pt/estgp/estgweb/services/common/IResult.java
New file
0,0 → 1,16
package pt.estgp.estgweb.services.common;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 14:58:03
* @see pt.estgp.estgweb.services.common
*/
public interface IResult
{
public String getTitle();
public String getSubTitle();
public String getBestFragments();
public String getText();
public String getUrl();
}
/impl/src/java/pt/estgp/estgweb/services/common/ICommonSearchResults.java
New file
0,0 → 1,15
package pt.estgp.estgweb.services.common;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 14:56:54
* @see pt.estgp.estgweb.services.common
*/
public interface ICommonSearchResults
{
public List<ISearchResults> getSearchResults();
public int getTotalResults();
}
/impl/src/java/pt/estgp/estgweb/services/common/ModuleEnum.java
New file
0,0 → 1,46
package pt.estgp.estgweb.services.common;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 15:00:27
* @see pt.estgp.estgweb.services.common
*/
public enum ModuleEnum
{
 
Announcements("module.Announcements","AnnouncementsCommonServices"),
Events("module.Events",null),
Blogs("module.Blogs",null),
Proxy("module.Proxy",null);
 
String messageKey;
String serviceName;
 
 
private ModuleEnum(String messageKey, String serviceName)
{
this.messageKey = messageKey;
this.serviceName = serviceName;
}
 
public static ModuleEnum parse(String messageKey)
{
for(ModuleEnum module: values())
{
if(messageKey.equals(module.getMessageKey()))
return module;
}
return null;
}
 
public String getMessageKey()
{
return messageKey;
}
 
public String getServiceName()
{
return serviceName;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/IModuleCommonServices.java
New file
0,0 → 1,20
package pt.estgp.estgweb.services.common;
 
import pt.estgp.estgweb.domain.UserSession;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 14:59:16
* @see pt.estgp.estgweb.services.common
*/
public interface IModuleCommonServices
{
public int countSearch(String search, SearchTypeEnum searchType, UserSession userSession);
public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession);
 
public int countToDo(UserSession userSession);
public IToDoCat getToDo(UserSession userSession);
 
}
/impl/src/java/pt/estgp/estgweb/services/common/SearchTypeEnum.java
New file
0,0 → 1,37
package pt.estgp.estgweb.services.common;
 
/**
* @author Jorge Machado
* @date 24/Abr/2008
* @time 15:00:50
* @see pt.estgp.estgweb.services.common
*/
public enum SearchTypeEnum
{
ExactPhrase("search.exactPhrase"),
AnyWord("search.anyWord"),
AllWords("search.allWords");
 
String messageKey;
 
 
private SearchTypeEnum(String messageKey)
{
this.messageKey = messageKey;
}
 
public static SearchTypeEnum parse(String messageKey)
{
for(SearchTypeEnum searchTypeEnum: values())
{
if(messageKey.equals(searchTypeEnum.getMessageKey()))
return searchTypeEnum;
}
return null;
}
 
public String getMessageKey()
{
return messageKey;
}
}
/impl/src/java/pt/estgp/estgweb/services/announcements/AnnouncementsCommonServices.java
New file
0,0 → 1,100
package pt.estgp.estgweb.services.announcements;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.*;
import pt.estgp.estgweb.services.common.impl.DefaultSearchResults;
import pt.estgp.estgweb.services.common.impl.DefaultResult;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;
 
import jomm.dao.impl.AbstractDao;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class AnnouncementsCommonServices implements IService, IModuleCommonServices
{
private static final Logger logger = Logger.getLogger(AnnouncementsCommonServices.class);
 
public int countSearch(String search, SearchTypeEnum searchType, UserSession userSession)
{
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
 
public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
DefaultSearchResults searchResults = new DefaultSearchResults();
searchResults.setModule(ModuleEnum.Announcements);
List<String> roles;
if(userSession == null || userSession.getUser() == null || ((UserImpl)userSession.getUser()).getRolesList() == null || ((UserImpl)userSession.getUser()).getRolesList().size() == 0)
{
roles = new ArrayList<String>();
roles.add(Globals.ALL_ROLE);
}
else
roles = ((UserImpl)userSession.getUser()).getRolesList();
 
List<Announcement> announcements = DaoFactory.getAnnouncementDaoImpl().searchAnnouncements(search, searchType, maxResults, page, roles,null);
if(announcements == null)
return searchResults;
for(Announcement a: announcements)
{
DefaultResult defaultResult = new DefaultResult();
defaultResult.setTitle(a.getTitle());
defaultResult.setSubTitle(a.getType());
defaultResult.setText(a.getText());
defaultResult.setUrl("/loadAnnouncement.do?id=" + a.getId()+"&dispatch=load");
searchResults.addResult(defaultResult);
}
return searchResults;
}
 
public int countToDo(UserSession userSession)
{
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
 
public IToDoCat getToDo(UserSession userSession)
{
return null; //To change body of implemented methods use File | Settings | File Templates.
}
 
public static void main(String[] args)
{
AbstractDao.getCurrentSession().beginTransaction();
UserSession sess = new UserSessionImpl();
sess.setUser(new UserImpl());
sess.getUser().setRoles("all");
ISearchResults searchResults = new AnnouncementsCommonServices().search("teste",SearchTypeEnum.AllWords,0,10,sess);
for(IResult result: searchResults.getResults())
{
System.out.println("title:" +result.getTitle());
System.out.println("subTitle:" +result.getSubTitle());
System.out.println("text:" +result.getText());
System.out.println("url" + result.getUrl());
System.out.println("bestFragments" + result.getBestFragments());
}
AbstractDao.commit();
}
}
/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java
59,17 → 59,14
*/
public List<String> getOwnerRoles()
{
if(getRoles() == null)
return null;
String[] roles = getRoles().split(",");
List<String> l = new ArrayList<String>();
for(String role: roles)
{
l.add(role);
}
return l;
return getRolesList();
}
 
public List<String> getRolesList()
{
return RoleManager.getRolesFromSerial(getRoles());
}
 
public Serializable getSerializable()
{
return getId();
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java
3,6 → 3,8
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.GenericUser;
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
 
import java.util.List;
import java.util.ArrayList;
22,115 → 24,105
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class AnnouncementDaoImpl extends AnnouncementDao
{
public static AnnouncementDaoImpl getInstance()
{
public class AnnouncementDaoImpl extends AnnouncementDao {
public static AnnouncementDaoImpl getInstance() {
if (myInstance == null)
myInstance = new AnnouncementDaoImpl();
return (AnnouncementDaoImpl) myInstance;
}
 
public List<Announcement> findAnnouncements(int maxAnnouncements,List<String> roles,String subTarget)
{
if(roles == null)
{
public List<Announcement> findAnnouncements(int maxAnnouncements, List<String> roles, String subTarget) {
if (roles == null) {
roles = new ArrayList<String>();
roles.add("all");
}
Criteria criteria = createCriteria();
Criterion co = null;
for(String role: roles)
{
Criterion cor = like("targetRoles","%" + role + "%");
if(co == null)
for (String role : roles) {
Criterion cor = like("targetRoles", "%" + role + "%");
if (co == null)
co = cor;
else
co = or(co,cor);
co = or(co, cor);
}
Criterion coSubTargets=null;
Criterion coSubTargets = null;
 
if(subTarget==null)
{
coSubTargets=isNull("subTargets");
if (subTarget == null) {
coSubTargets = isNull("subTargets");
}
else
{
coSubTargets =eq("subTargets",subTarget);
else {
coSubTargets = eq("subTargets", subTarget);
}
MyCalendar cNow = new MyCalendar();
MyCalendar calendarWithOutTime = new MyCalendar(cNow.getYear(),cNow.getMonth(),cNow.getDay());
MyCalendar calendarWithOutTime = new MyCalendar(cNow.getYear(), cNow.getMonth(), cNow.getDay());
Date now = calendarWithOutTime.getTime();
criteria.add(co)
.add(or(or(lt("startDate",now),eq("startDate",now)),isNull("startDate")))
.add(or(or(gt("expireDate",now),eq("expireDate",now)),isNull("expireDate")))
.add(eq("status",true))
.add(or(or(lt("startDate", now), eq("startDate", now)), isNull("startDate")))
.add(or(or(gt("expireDate", now), eq("expireDate", now)), isNull("expireDate")))
.add(eq("status", true))
.add(coSubTargets)
.setMaxResults(maxAnnouncements)
.addOrder(Order.desc("saveDate"));
return criteria.list();
}
 
public List<Announcement> findAnnouncements(int maxAnnouncements,List<String> roles,String type,String subTarget)
{
return findAnnouncements(0,maxAnnouncements,roles, type,subTarget);
public List<Announcement> findAnnouncements(int maxAnnouncements, List<String> roles, String type, String subTarget) {
return findAnnouncements(0, maxAnnouncements, roles, type, subTarget);
}
public List<Announcement> findAnnouncements(int startPage, int maxAnnouncements,List<String> roles,String type,String subTarget)
{
Criteria criteria = createMaxAnnouncementsRolesTypeCriteria(maxAnnouncements, roles,type,subTarget);
return criteria.setFirstResult(maxAnnouncements*startPage).list();
 
public List<Announcement> findAnnouncements(int startPage, int maxAnnouncements, List<String> roles, String type, String subTarget) {
Criteria criteria = createMaxAnnouncementsRolesTypeCriteria(maxAnnouncements, roles, type, subTarget);
return criteria.setFirstResult(maxAnnouncements * startPage).list();
}
 
public int countAnnouncements(int maxAnnouncements,List<String> roles,String type,String subTarget)
{
Criteria criteria = createMaxAnnouncementsRolesTypeCriteria(Integer.MAX_VALUE, roles,type,subTarget);
public int countAnnouncements(int maxAnnouncements, List<String> roles, String type, String subTarget) {
Criteria criteria = createMaxAnnouncementsRolesTypeCriteria(Integer.MAX_VALUE, roles, type, subTarget);
return criteria.list().size();
}
 
private Criteria createMaxAnnouncementsRolesTypeCriteria(int maxAnnouncements,List<String> roles,String type,String subTarget)
{
if(roles == null)
{
private Criteria createMaxAnnouncementsRolesTypeCriteria(int maxAnnouncements, List<String> roles, String type, String subTarget) {
return createMaxAnnouncementsPageRolesTypeCriteria(0, maxAnnouncements, roles, type, subTarget);
}
 
private Criteria createMaxAnnouncementsPageRolesTypeCriteria(int page, int maxAnnouncements, List<String> roles, String type, String subTarget) {
if (roles == null) {
roles = new ArrayList<String>();
roles.add("all");
}
Criteria criteria = createCriteria();
Criterion coRole = null;
for(String role: roles)
{
Criterion cor = like("targetRoles","%" + role + "%");
if(coRole == null)
for (String role : roles) {
Criterion cor = like("targetRoles", "%" + role + "%");
if (coRole == null)
coRole = cor;
else
coRole = or(coRole,cor);
coRole = or(coRole, cor);
}
Criterion coSubTargets=null;
Criterion coSubTargets = null;
 
if(subTarget==null)
{
coSubTargets=isNull("subTargets");
if (subTarget == null) {
coSubTargets = isNull("subTargets");
}
else
{
coSubTargets =eq("subTargets",subTarget);
else {
coSubTargets = eq("subTargets", subTarget);
}
Criterion coType=eq("type",type);
if(type != null)
criteria.add(eq("type", type));
MyCalendar cNow = new MyCalendar();
MyCalendar calendarWithOutTime = new MyCalendar(cNow.getYear(),cNow.getMonth(),cNow.getDay());
MyCalendar calendarWithOutTime = new MyCalendar(cNow.getYear(), cNow.getMonth(), cNow.getDay());
Date now = calendarWithOutTime.getTime();
criteria.add(coRole)
.add(coType)
.add(or(or(lt("startDate",now),eq("startDate",now)),isNull("startDate")))
.add(or(or(gt("expireDate",now),eq("expireDate",now)),isNull("expireDate")))
.add(eq("status",true))
.add(or(or(lt("startDate", now), eq("startDate", now)), isNull("startDate")))
.add(or(or(gt("expireDate", now), eq("expireDate", now)), isNull("expireDate")))
.add(eq("status", true))
.add(coSubTargets)
.setFirstResult(page * maxAnnouncements)
.setMaxResults(maxAnnouncements)
.addOrder(Order.desc("saveDate"));
return criteria;
}
 
 
/* public static void main(String[] args)
/* public static void main(String[] args)
{
AbstractDao.getCurrentSession().beginTransaction();
List<String> roles = new ArrayList<String>();
150,4 → 142,35
}
AbstractDao.getCurrentSession().beginTransaction().commit();
}*/
 
public List<Announcement> searchAnnouncements(String query, SearchTypeEnum searchTypeEnum, int maxAnnouncements, int page, List<String> roles, String subTarget) {
 
Criterion c = null;
if (searchTypeEnum == SearchTypeEnum.ExactPhrase)
c = or(like("text", "%" + query + "%"), like("title", "%" + query + "%"));
else if (searchTypeEnum == SearchTypeEnum.AllWords) {
String[] fields = query.split(" ");
for (String field : fields) {
if (c == null)
c = or(like("text", "%" + field + "%"), like("title", "%" + field + "%"));
else
c = and(c, or(like("text", "%" + field + "%"), like("title", "%" + field + "%")));
}
 
}
else {
String[] fields = query.split(" ");
for (String field : fields) {
if (c == null)
c = or(like("text", "%" + field + "%"), like("title", "%" + field + "%"));
else
c = or(c, or(like("text", "%" + field + "%"), like("title", "%" + field + "%")));
}
}
 
Criteria criteria = createMaxAnnouncementsPageRolesTypeCriteria(page, maxAnnouncements, roles, null, null);
criteria.add(c);
return criteria.list();
}
 
}
/impl/src/java/pt/estgp/estgweb/web/form/AddRolesForm.java
1,8 → 1,6
package pt.estgp.estgweb.web.form;
 
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.form.blog.BlogForm;
 
import java.util.List;
 
10,7 → 8,7
* @author Jorge Machado
* @date 21/Abr/2008
* @time 14:28:59
* @see pt.estgp.estgweb.web.form.blog
* @see pt.estgp.estgweb.web.form.blogs
*/
public class AddRolesForm extends ApplicationForm
{
/impl/src/java/pt/estgp/estgweb/web/form/blogs/BlogForm.java
New file
0,0 → 1,36
package pt.estgp.estgweb.web.form.blogs;
 
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.web.form.AddRolesForm;
 
import org.apache.struts.upload.FormFile;
 
/**
* @author Jorge Machado
* @date 21/Abr/2008
* @time 14:28:59
* @see pt.estgp.estgweb.web.form.blogs
*/
public class BlogForm extends AddRolesForm
{
private BlogView blogView = new BlogView();
 
private FormFile image;
 
public BlogView getBlogView() {
return blogView;
}
 
public void setBlogView(BlogView blogView) {
this.blogView = blogView;
}
 
public FormFile getImage() {
return image;
}
 
public void setImage(FormFile image) {
this.image = image;
}
}
/impl/src/java/pt/estgp/estgweb/web/controllers/blogs/BlogsController.java
New file
0,0 → 1,111
package pt.estgp.estgweb.web.controllers.blogs;
 
import pt.estgp.estgweb.web.controllers.AddRolesController;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.form.blogs.BlogForm;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import org.apache.log4j.Logger;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.util.Date;
 
/**
* @author Jorge Machado
* @date 26/Fev/2008
* @time 18:01:54
* @see pt.estgp.estgweb.web
*/
public class BlogsController extends AddRolesController {
 
private static final Logger logger = Logger.getLogger(BlogsController.class);
 
public ActionForward save(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException {
try {
BlogForm blogForm = (BlogForm) form;
if (blogForm.getBlogView().getId() <= 0) {
Blog blog = DomainObjectFactory.createBlogImpl();
blogForm.getBlogView().persistViewInObject(blog);
IServiceManager sm = ServiceManager.getInstance();
 
if (blogForm.getImage().getFileSize() != 0) {
FormFile image = blogForm.getImage();
InputStream stream = image.getInputStream();
ByteArrayOutputStream b = new ByteArrayOutputStream();
int readedBytes;
byte[] buf = new byte[1024];
while ((readedBytes = stream.read(buf)) > 0) {
b.write(buf, 0, readedBytes);
}
b.close();
Image i = DomainObjectFactory.createImageImpl();
i.setImage(b.toByteArray());
i.setContentType(image.getContentType());
i.setSize(image.getFileSize());
i.setDescription(blog.getTitle());
i.setName(image.getFileName());
i.setSaveDate(new Date());
blog.setImage(i);
}
String[] names = new String[]{"object"};
Object[] args = new Object[]{blog};
BlogView bV = (BlogView) sm.execute(RequestUtils.getRequester(request), "CreateBlog", args, names);
addMessage(request, "blog.created.success", "" + bV.getId());
request.setAttribute("BlogView", bV);
return mapping.findForward("success");
} else {
BlogView bV = blogForm.getBlogView();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"object"};
Object[] args = new Object[]{bV};
bV = (BlogView) sm.execute(RequestUtils.getRequester(request), "EditBlog", args, names);
addMessage(request, "blog.edited.success", "" + bV.getId());
return mapping.findForward("success");
}
}
catch (FilterChainFailedException e) {
return mapping.findForward("error401");
}
catch (Throwable e) {
logger.error(e, e);
throw e;
}
}
 
public ActionForward load(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException {
try
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{Long.parseLong(request.getParameter("id"))};
BlogView bV = (BlogView) sm.execute(RequestUtils.getRequester(request), "LoadBlog", args, names);
request.setAttribute("BlogView", bV);
return mapping.findForward("success");
}
catch (FilterChainFailedException e) {
return mapping.findForward("error401");
}
catch (Throwable e) {
logger.error(e, e);
throw e;
}
 
}
}
/impl/src/web/admin/blogs/submitBlog.jsp
New file
0,0 → 1,100
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ 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-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/estgweb.tld" prefix="estgweb" %>
<jsp:useBean id="BlogForm" type="pt.estgp.estgweb.web.form.blogs.BlogForm" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<html:messages id="messages"/>
<html:errors/>
<html:form action="/submitBlog" enctype="multipart/form-data">
<html:hidden property="role"/>
<html:hidden property="blogView.id"/>
<input type="hidden" name="dispatch" value="addRole">
<table class="form">
 
<estgweb:isAdmin>
<tr>
<th>
<bean:message key="blog.status"/>
</th>
<td>
<html:select property="blogView.status">
<html:option value="true"><bean:message key="yes"/></html:option>
<html:option value="false"><bean:message key="no"/></html:option>
</html:select>
</td>
</tr>
</estgweb:isAdmin>
<tr>
<th>
<bean:message key="blog.target.roles"/>
</th>
<td>
<html:select property="targetRolesStr">
<estgweb:isAdmin>
<logic:present name="BlogForm" property="targetRoles">
<logic:iterate id="item" name="BlogForm" property="targetRoles">
<jomm:option itemName="item" comparableObjectName="BlogForm" comparableObjectProperty="targetRolesStr">
<jomm:message patternMessage="user.role.{0}" name0="item"/>
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>" onclick="set(this.form,'addRole');this.form.submit()">
</logic:present>
</estgweb:isAdmin>
<estgweb:isNotAdmin>
<html:option value="all"><bean:message key="user.role.all"/></html:option>
<html:option value="student"><bean:message key="user.role.student"/></html:option>
<html:option value="oldStudent"><bean:message key="user.role.oldStudent"/></html:option>
<html:option value="futureStudent"><bean:message key="user.role.futureStudent"/></html:option>
<html:option value="teacher"><bean:message key="user.role.teacher"/></html:option>
</estgweb:isNotAdmin>
</html:select>
 
 
<logic:present name="BlogForm" property="selectedRoles">
<logic:notEmpty name="BlogForm" property="selectedRoles">
<ul>
<logic:iterate id="item" name="BlogForm" property="selectedRoles">
<li><jomm:message patternMessage="user.role.{0}" name0="item"/> <a href="BlogForm.role.value='${item}';set(BlogForm,'removeRole');BlogForm.submit();"/></li>
</logic:iterate>
</ul>
</logic:notEmpty>
</logic:present>
</td>
</tr>
 
<tr>
<th>
<bean:message key="blog.title"/>
</th>
<td>
<html:text property="blogView.title" maxlength="250"/>
</td>
</tr>
<tr>
<th>
<bean:message key="blog.image"/>
</th>
<td>
<html:file property="image"/>
</td>
</tr>
 
<tr>
<th>
<bean:message key="blog.description"/>
</th>
<td>
<html:textarea property="blogView.description"/>
</td>
</tr>
<tr class="buttons">
<td colspan="2">
<input type="button" onclick="set(this.form,'save');this.form.submit()" value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</html:form>
/impl/src/web/admin/blogs/topnavCreateBlog.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "submit.blog");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/public/blogs/blog.jsp
New file
0,0 → 1,30
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ 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-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/estgweb.tld" prefix="estgweb" %>
<jsp:useBean id="BlogView" type="pt.estgp.estgweb.domain.views.BlogView" scope="request"/>
 
<div class="seccao">
 
<h1><bean:write name="BlogView" property="title"/></h1>
 
<p>
<%
if(BlogView.getImage() != null)
{
%>
<img align="left" alt="<%=BlogView.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=BlogView.getImage().getId()%>">
<%
}
%>
${BlogView.description}
</p>
 
<p class="pFooter">
<bean:message key="blog.owner"/> <a href="mailto:${BlogView.ownerEmail}">${BlogView.owner.name}</a> <bean:message key="at"/> ${BlogView.formatedSaveDate}
</p>
</div>