/* * Copyright (C) 2011 Interactive Media Management * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ package dk.i2m.converge.ws.soap; import dk.i2m.converge.core.DataNotFoundException; import dk.i2m.converge.core.content.NewsItemPlacement; import dk.i2m.converge.core.workflow.Section; import dk.i2m.converge.ejb.facades.OutletFacadeLocal; import dk.i2m.converge.ws.model.Edition; import dk.i2m.converge.ws.model.ModelConverter; import dk.i2m.converge.ws.model.Outlet; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; /** * Service for accessing {@link Outlet}s. * * @author Allan Lykke Christensen */ //@WebService(serviceName = "OutletService") public class OutletService { private static final Logger LOG = Logger.getLogger(OutletService.class. getName()); @EJB private OutletFacadeLocal outletFacade; @WebMethod(operationName = "getEditions") public List<dk.i2m.converge.ws.model.Edition> getEditions(@WebParam(name = "outletId") Long outletId, @WebParam(name = "date") Date date) { Calendar editionDate = Calendar.getInstance(); editionDate.setTime(date); List<dk.i2m.converge.core.workflow.Edition> editions = outletFacade. findEditionByOutletAndDate(outletId, editionDate); List<Edition> outputEditions = new ArrayList<Edition>(); for (dk.i2m.converge.core.workflow.Edition edition : editions) { Edition output = new Edition(); output.setId(edition.getId()); output.setCloseDate(edition.getCloseDate()); output.setExpirationDate(edition.getExpirationDate().getTime()); output.setPublicationDate(edition.getPublicationDate().getTime()); outputEditions.add(output); } return outputEditions; } @WebMethod(operationName = "createEdition") public Edition createEdition(@WebParam(name = "outletId") Long outletId, @WebParam(name = "open") boolean open, @WebParam(name = "publicationDate") Date publicationDate, @WebParam(name = "expirationDate") Date expirationDate, @WebParam(name = "closeDate") Date closeDate) { dk.i2m.converge.core.workflow.Edition edition = outletFacade. createEdition(outletId, open, publicationDate, expirationDate, closeDate); Edition output = new Edition(); output.setId(edition.getId()); output.setCloseDate(edition.getCloseDate()); output.setExpirationDate(edition.getExpirationDate().getTime()); output.setPublicationDate(edition.getPublicationDate().getTime()); return output; } /** * Obtains a given {@link Outlet} and its {@link Section}s. * * @param id Unique identifier of the {@link Outlet} * @return {@link Outlet} matching the given {@code id} */ @WebMethod(operationName = "getOutlet") public Outlet getOutlet(@WebParam(name = "outletId") Long id) { Outlet outlet = new Outlet(); try { dk.i2m.converge.core.workflow.Outlet convergeOutlet; convergeOutlet = outletFacade.findOutletById(id); outlet = ModelConverter.toOutlet(convergeOutlet); } catch (DataNotFoundException ex) { LOG.log(Level.WARNING, "Unknown outlet requested"); } return outlet; } @WebMethod(operationName = "createSection") public Long createSection(@WebParam(name = "outletId") Long outletId, @WebParam(name = "parentId") Long parentSectionId, @WebParam(name = "name") String name, @WebParam(name = "description") String description, @WebParam(name = "active") boolean active) throws DataNotFoundException { Section section = new Section(); section.setActive(true); section.setDescription(description); section.setName(name); section.setOutlet(outletFacade.findOutletById(outletId)); if (parentSectionId != null) { section.setParent(outletFacade.findSectionById(parentSectionId)); } section = outletFacade.createSection(section); return section.getId(); } @WebMethod(operationName = "findSectionByName") public List<dk.i2m.converge.ws.model.Section> findSectionByName(@WebParam(name = "outletId") Long outletId, @WebParam(name = "section") String sectionName) throws DataNotFoundException { List<Section> sections = outletFacade.findSectionByName(outletId, sectionName); List<dk.i2m.converge.ws.model.Section> results = new ArrayList<dk.i2m.converge.ws.model.Section>(); for (Section section : sections) { dk.i2m.converge.ws.model.Section result = new dk.i2m.converge.ws.model.Section(); result.setId(section.getId()); result.setTitle(section.getName()); results.add(result); } return results; } /** * Obtains the published news items in a given edition. * * @param id Unique identifier of the {@link Edition} * @return {@link Edition} containing the published {@link NewsItem}s */ @WebMethod(operationName = "getPublishedEdition") public Edition getPublishedEdition(@WebParam(name = "editionId") Long id) { Edition edition = new Edition(); try { dk.i2m.converge.core.workflow.Edition convergeEdition; convergeEdition = outletFacade.findEditionById(id); edition.setId(convergeEdition.getId()); edition.setCloseDate(convergeEdition.getCloseDate()); edition.setPublicationDate(convergeEdition.getPublicationDate(). getTime()); edition.setExpirationDate(convergeEdition.getExpirationDate(). getTime()); for (NewsItemPlacement nip : convergeEdition.getPlacements()) { if (nip.getNewsItem().isEndState()) { edition.getItems().add(ModelConverter.toNewsItem(nip)); } } } catch (DataNotFoundException ex) { LOG.log(Level.WARNING, "Unknown outlet requested"); } return edition; } @WebMethod(operationName = "scheduleAction") public void scheduleAction(@WebParam(name = "editionId") Long editionId, @WebParam(name = "actionId") Long actionId) { outletFacade.scheduleAction(editionId, actionId); } @WebMethod(operationName = "scheduleActions") public void scheduleActions(@WebParam(name = "editionId") Long editionId) { outletFacade.scheduleActions(editionId); } }