/** * Copyright (c) 2009 Juwi MacMillan Group GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // license-header java merge-point /** * This is only generated once! It will never be overwritten. * You can (and have to!) safely modify it by hand. */ package de.juwimm.cms.beans; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.dom4j.io.XMLWriter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.tizzit.plugins.server.transformer.BaseContentHandler; import org.tizzit.util.XercesHelper; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; import de.juwimm.cms.model.HostHbmDao; import de.juwimm.cms.vo.ViewComponentValue; @Controller public class TizzitRestAPIController { private static Logger log = Logger.getLogger(TizzitRestAPIController.class); @Autowired private WebServiceSpring webSpringBean; @Autowired private HostHbmDao hostHbmDao; public void setWebSpringBean(WebServiceSpring webSpringBean) { log.info("connecting webservice..."); this.webSpringBean = webSpringBean; } @RequestMapping(value = "/unitinfoxml/{unitid}", method = RequestMethod.GET) @ResponseBody public String unitInfoXml(@PathVariable int unitid) { if (log.isDebugEnabled()) log.debug("/unitinfoxml/" + unitid); String sb = null; try { sb = webSpringBean.getUnitInfoXml(unitid); } catch (Exception e) { log.warn("Error calling getUnitInfoXml on webservicespring"); } return sb; } @RequestMapping(value = "/memberlist/{siteId}/{unitId}/{firstname}/{lastname}", method = RequestMethod.GET) @ResponseBody public String getMembersList(@PathVariable int siteId, @PathVariable int unitId, @PathVariable String firstname, @PathVariable String lastname) { if (log.isDebugEnabled()) log.debug("/memberlist/" + siteId); String sb = null; try { sb = webSpringBean.getMembersList(siteId, unitId, firstname, lastname); } catch (Exception e) { log.warn("Error calling getMembersList on webservicespring"); } return sb; } @RequestMapping(value = "/navigationxml/{refVcId}/{since}/{depth}/{getPUBLSVersion}", method = RequestMethod.GET) @ResponseBody public String getNavigationXml(@PathVariable int refVcId, @PathVariable String since, @PathVariable int depth, @PathVariable boolean getPUBLSVersion) throws Exception { return this.getNavigationXml(refVcId, since, depth, getPUBLSVersion, -1); } @RequestMapping(value = "/navigationxml/{refVcId}/{since}/{depth}/{getPUBLSVersion}/{showType}", method = RequestMethod.GET) @ResponseBody public String getNavigationXml(@PathVariable int refVcId, @PathVariable String since, @PathVariable int depth, @PathVariable boolean getPUBLSVersion, @PathVariable int showType) throws Exception { if (log.isDebugEnabled()) log.debug("/navigationxml/" + refVcId); String sb = null; /*try { sb = webSpringBean.getNavigationXml(refVcId, since, depth, getPUBLSVersion); } catch (Exception e) { log.warn("Error calling getNavigationXml on webservicespring"); } return sb; */ int ifDistanceToNavigationRoot = -1; boolean showOnlyAuthorized = false; if (ifDistanceToNavigationRoot == -1 || webSpringBean.getNavigationRootDistance4VCId(refVcId) >= ifDistanceToNavigationRoot) { ViewComponentValue viewComponentValue = webSpringBean.getViewComponent4Id(refVcId); String navigationXml = webSpringBean.getNavigationXml(refVcId, since, depth, null, getPUBLSVersion,showOnlyAuthorized, false, showType); if (navigationXml != null && !navigationXml.isEmpty()) { Document docNavigationXml = XercesHelper.string2Dom(navigationXml); // add axis String viewComponentXPath = "//viewcomponent[@id=\"" + refVcId + "\"]"; if (log.isDebugEnabled()) log.debug("Resolving Navigation Axis: " + viewComponentXPath); Node found = XercesHelper.findNode(docNavigationXml, viewComponentXPath); if (found != null) { if (log.isDebugEnabled()) log.debug("Found Axis in viewComponentId " + refVcId); this.setAxisToRootAttributes(found); } else { ViewComponentValue axisVcl = webSpringBean.getViewComponent4Id(viewComponentValue.getParentId()); while (axisVcl != null) { found = XercesHelper.findNode(docNavigationXml, "//viewcomponent[@id=\"" + axisVcl.getViewComponentId() + "\"]"); if (found != null) { if (log.isDebugEnabled()) log.debug("Found Axis in axisVcl " + axisVcl.getViewComponentId()); this.setAxisToRootAttributes(found); break; } axisVcl = axisVcl.getParentId() == null ? null : webSpringBean.getViewComponent4Id(axisVcl.getParentId()); } } // filter safeGuard if (showOnlyAuthorized) { /*try { String allNavigationXml = XercesHelper.doc2String(docNavigationXml); String filteredNavigationXml = this.webSpringBean.filterNavigation(allNavigationXml, safeguardMap); if (log.isDebugEnabled()) { log.debug("allNavigationXml\n" + allNavigationXml); log.debug("filteredNavigationXml\n" + filteredNavigationXml); } docNavigationXml = XercesHelper.string2Dom(filteredNavigationXml); } catch (Exception e) { log.error("Error filtering navigation with SafeGuard: " + e.getMessage(), e); }*/ } sb = XercesHelper.doc2String(docNavigationXml); } } return sb; } private void setAxisToRootAttributes(Node found) { Node changeNode = found; while (changeNode != null && changeNode instanceof Element && changeNode.getNodeName().equalsIgnoreCase("viewcomponent")) { ((Element) changeNode).setAttribute("onAxisToRoot", "true"); changeNode = changeNode.getParentNode(); } } @RequestMapping(value = "/navigationbackwardxml/{refVcId}/{since}/{dontShowFirst}/{getPUBLSVersion}", method = RequestMethod.GET) @ResponseBody public String getNavigationBackwardXml(@PathVariable int refVcId, @PathVariable String since, @PathVariable int dontShowFirst, @PathVariable boolean getPUBLSVersion) { if (log.isDebugEnabled()) log.debug("/navigationbackwardxml/" + refVcId); String sb = null; try { sb = webSpringBean.getNavigationBackwardXml(refVcId, since, dontShowFirst, getPUBLSVersion,0); } catch (Exception e) { log.warn("Error calling getNavigationBackwardXml on webservicespring"); } return sb; } @RequestMapping(value = "/content/{vcId}/{getPUBLSVersion}", method = RequestMethod.GET) @ResponseBody public String getContent(@PathVariable int vcId, @PathVariable boolean getPUBLSVersion) { if (log.isDebugEnabled()) log.debug("/content/" + vcId); String sb = null; try { sb = webSpringBean.getContent(vcId, getPUBLSVersion); } catch (Exception e) { log.warn("Error calling getContent on webservicespring"); } return sb; } @RequestMapping(value = "/contentparsed/{vcId}/{getPUBLSVersion}", method = RequestMethod.GET) @ResponseBody public String getContentParsed(@PathVariable int vcId, @PathVariable boolean getPUBLSVersion) { if (log.isDebugEnabled()) log.debug("/contentparsed/" + vcId); String sb = null; try { sb = webSpringBean.getContent(vcId, getPUBLSVersion); } catch (Exception e) { log.warn("Error calling getContent on webservicespring"); } StringWriter sw = new StringWriter(); if (sb != null) { try { XMLReader parser = XMLReaderFactory.createXMLReader(); XMLWriter xw = new XMLWriter(sw); PluginManagement pm = new PluginManagement(); BaseContentHandler transformer = new BaseContentHandler(pm, xw, webSpringBean, vcId, getPUBLSVersion); parser.setContentHandler(transformer); InputStream stream = new ByteArrayInputStream(sb.getBytes()); InputSource inputSource = new InputSource(stream); long parseTime = System.currentTimeMillis(); parser.parse(inputSource); parseTime = System.currentTimeMillis() - parseTime; log.debug("Parse time: " + parseTime + "ms"); } catch (SAXException saxe) { log.warn("Error while parsing content of: " + vcId, saxe); } catch (IOException ioe) { log.warn("Error while parsing content of: " + vcId, ioe); } } return sw.toString().substring(38); } @RequestMapping(value = "/mandatordir/{hostName}", method = RequestMethod.GET) @ResponseBody public String getMandatorDir(@PathVariable String hostName) { if (log.isDebugEnabled()) log.debug("/mandatordir/" + hostName); String sb = null; try { sb = webSpringBean.getMandatorDir(hostName); } catch (Exception e) { log.warn("Error calling getMandatorDir on webservicespring"); } return sb; } @RequestMapping(value = "/resolveShortLink/{hostName}", method = RequestMethod.GET) @ResponseBody public String resolveShortLink(@PathVariable String hostName, @PathVariable String requestPath) { if (log.isDebugEnabled()) log.debug("/resolveShortLink/" + hostName); String sb = null; try { sb = webSpringBean.resolveShortLink(hostName, requestPath); } catch (Exception e) { log.warn("Error calling resolveShortLink on webservicespring"); } return sb; } @RequestMapping(value = "/startpage/{hostName}", method = RequestMethod.GET) @ResponseBody public String getStartPage(@PathVariable String hostName) { if (log.isDebugEnabled()) log.debug("/startpage/" + hostName); String sb = null; try { sb = webSpringBean.getStartPage(hostName); } catch (Exception e) { log.warn("Error calling getStartPage on webservicespring"); } return sb; } @RequestMapping(value = "/path4unit/{unitId}/{viewDocumentId}", method = RequestMethod.GET) @ResponseBody public String getPath4Unit(@PathVariable int unitId, @PathVariable int viewDocumentId) { if (log.isDebugEnabled()) log.debug("/path4unit/" + unitId); String sb = null; try { sb = webSpringBean.getPath4Unit(unitId, viewDocumentId); } catch (Exception e) { log.warn("Error calling getPath4Unit on webservicespring"); } return sb; } @RequestMapping(value = "/path4viewcomponent/{viewComponentId}", method = RequestMethod.GET) @ResponseBody public String getPath4ViewComponent(@PathVariable int viewComponentId) { if (log.isDebugEnabled()) log.debug("/path4viewcomponent/" + viewComponentId); String sb = null; try { sb = webSpringBean.getPath4ViewComponent(viewComponentId); } catch (Exception e) { log.warn("Error calling getPath4ViewComponent on webservicespring"); } return sb; } @RequestMapping(value = "/mimetype4picture/{pictureId}", method = RequestMethod.GET) @ResponseBody public String getMimetype4Picture(@PathVariable int pictureId) { if (log.isDebugEnabled()) log.debug("/mimetype4picture/" + pictureId); String sb = null; try { sb = webSpringBean.getMimetype4Picture(pictureId); } catch (Exception e) { log.warn("Error calling getMimetype4Picture on webservicespring"); } return sb; } @RequestMapping(value = "/documentname/{documentId}", method = RequestMethod.GET) @ResponseBody public String getDocumentName(@PathVariable int documentId) { if (log.isDebugEnabled()) log.debug("/documentname/" + documentId); String sb = null; try { sb = webSpringBean.getDocumentName(documentId); } catch (Exception e) { log.warn("Error calling getDocumentName on webservicespring"); } return sb; } @RequestMapping(value = "/mimetypefordocument/{documentId}", method = RequestMethod.GET) @ResponseBody public String getMimetype4Document(@PathVariable int documentId) { if (log.isDebugEnabled()) log.debug("/mimetypefordocument/" + documentId); String sb = null; try { sb = webSpringBean.getMimetype4Document(documentId); } catch (Exception e) { log.warn("Error calling getMimetype4Document on webservicespring"); } return sb; } @RequestMapping(value = "/safegueardloginpath/{viewComponentId}", method = RequestMethod.GET) @ResponseBody public String getSafeguardLoginPath(@PathVariable int viewComponentId) { if (log.isDebugEnabled()) log.debug("/safegueardloginpath/" + viewComponentId); String sb = null; try { sb = webSpringBean.getSafeguardLoginPath(viewComponentId); } catch (Exception e) { log.warn("Error calling getSafeguardLoginPath on webservicespring"); } return sb; } @RequestMapping(value = "/safeguardrealmidandtype/{viewComponentId}", method = RequestMethod.GET) @ResponseBody public String getSafeguardRealmIdAndType(@PathVariable int viewComponentId) { if (log.isDebugEnabled()) log.debug("/safeguardrealmidandtype/" + viewComponentId); String sb = null; try { sb = webSpringBean.getSafeguardRealmIdAndType(viewComponentId); } catch (Exception e) { log.warn("Error calling getSafeguardRealmIdAndType on webservicespring"); } return sb; } @RequestMapping(value = "/allunitsxml/{siteId}", method = RequestMethod.GET) @ResponseBody public String getAllUnitsXml(@PathVariable int siteId) { if (log.isDebugEnabled()) log.debug("/allunitsxml/" + siteId); String sb = null; try { sb = webSpringBean.getAllUnitsXml(siteId); } catch (Exception e) { log.warn("Error calling getAllUnitsXml on webservicespring"); } return sb; } @RequestMapping(value = "/allunitlistxml/{siteId}", method = RequestMethod.GET) @ResponseBody public String getUnitListXml(@PathVariable int siteId) { if (log.isDebugEnabled()) log.debug("/allunitlistxml/" + siteId); String sb = null; try { sb = webSpringBean.getUnitListXml(siteId); } catch (Exception e) { log.warn("Error calling getUnitListXml on webservicespring"); } return sb; } @RequestMapping(value = "/heading/{contentId}/{liveServer}", method = RequestMethod.GET) // @ResponseBody public String getHeading(@PathVariable int contentId, @PathVariable boolean liveServer) { if (log.isDebugEnabled()) log.debug("/heading/" + contentId); String sb = null; try { sb = webSpringBean.getHeading(contentId, liveServer); } catch (Exception e) { log.warn("Error calling getHeading on webservicespring"); } return sb; } @RequestMapping(value = "/defaultlanguage/{siteId}", method = RequestMethod.GET) @ResponseBody public String getDefaultLanguage(@PathVariable int siteId) { if (log.isDebugEnabled()) log.debug("/defaultLanguage/" + siteId); String sb = null; try { sb = webSpringBean.getDefaultLanguage(siteId); } catch (Exception e) { log.warn("Error calling getDefaultLanguage on webservicespring"); } return sb; } @RequestMapping(value = "/includecontent/{currentViewComponentId}/{includeUnit}/{includeBy}/{getPublsVersion}/{xPathQuery}", method = RequestMethod.GET) @ResponseBody public String getIncludeContent(@PathVariable int currentViewComponentId, @PathVariable boolean includeUnit, @PathVariable String includeBy, @PathVariable boolean getPublsVersion, @PathVariable String xPathQuery) { if (log.isDebugEnabled()) log.debug("/includecontent/" + currentViewComponentId); String sb = null; try { sb = webSpringBean.getIncludeContent(currentViewComponentId, includeUnit, includeBy, getPublsVersion, xPathQuery); } catch (Exception e) { log.warn("Error calling getIncludeContent on webservicespring"); } return sb; } @RequestMapping(value = "/includeteaser/{currentViewComponentId}/{getPublsVersion}/{teaserRequest}", method = RequestMethod.GET) @ResponseBody public String getIncludeTeaser(@PathVariable int currentViewComponentId, @PathVariable boolean getPublsVersion, @PathVariable String teaserRequest) { if (log.isDebugEnabled()) log.debug("/includeTeaser/" + currentViewComponentId); String sb = null; try { sb = webSpringBean.getIncludeTeaser(currentViewComponentId, getPublsVersion, teaserRequest); } catch (Exception e) { log.warn("Error calling getIncludeTeaser on webservicespring"); } return sb; } @RequestMapping(value = "/unitinfoxml/{unitId}", method = RequestMethod.GET) @ResponseBody public String getUnitInfoXml(@PathVariable int unitId) { if (log.isDebugEnabled()) log.debug("/unitinfoxml/" + unitId); String sb = null; try { sb = webSpringBean.getUnitInfoXml(unitId); } catch (Exception e) { log.warn("Error calling getUnitInfoXml on webservicespring"); } return sb; } @RequestMapping(value = "/lastmodifiedpages/{viewComponentId}/{unitId}/{numberOfPages}/{getPublsVersion}", method = RequestMethod.GET) @ResponseBody public String getLastModifiedPages(@PathVariable int viewComponentId, @PathVariable int unitId, @PathVariable int numberOfPages, @PathVariable boolean getPublsVersion) { if (log.isDebugEnabled()) log.debug("/lastmodifiedpages/" + viewComponentId); String sb = null; try { sb = webSpringBean.getLastModifiedPages(viewComponentId, unitId, numberOfPages, getPublsVersion); } catch (Exception e) { log.warn("Error calling getLastModifiedPages on webservicespring"); } return sb; } @RequestMapping(value = "/getmodifieddate4cache/{viewComponentId}/{hostName}", method = RequestMethod.GET) @ResponseBody public long getModifiedDate4Cache(@PathVariable int viewComponentId, @PathVariable String hostName) { if (log.isDebugEnabled()) log.debug("/getmodifieddate4cache/" + viewComponentId); long date = 0; try { date = webSpringBean.getModifiedDate4Cache(viewComponentId, hostName); } catch (Exception e) { log.warn("Error calling getModifiedDate4Cache on webservicespring"); } return date; } @RequestMapping(value = "/getmodifieddate4cache", method = RequestMethod.GET) @ResponseBody public long getModifiedDate4Cache(@RequestParam(value = "host") String hostName, @RequestParam(value = "requestPath") String requestPath) { if (log.isDebugEnabled()) log.debug("/getmodifieddate4cache/"); long date = 0; try { String viewType = "browser"; Map<String, String> propertyMap = this.webSpringBean.getSitemapParameters(hostName, requestPath, viewType, null, null, new HashMap<String, String>()); Integer viewComponentId = Integer.getInteger(propertyMap.get("viewComponentId")); date = webSpringBean.getModifiedDate4Cache(viewComponentId, propertyMap.get("hostName")); } catch (Exception e) { log.warn("Error calling getModifiedDate4Cache on webservicespring"); } return date; } @RequestMapping(value = "/synchronizegrailsuserroles", method = RequestMethod.POST) public void synchronizeGrailsUserRoles(@RequestBody String roles) { if (log.isDebugEnabled()) log.debug("/synchronizegrailsuserroles/"); // get the role names from the body and write them to an array int anzRoles = 10; String[] grailsRoles = new String[anzRoles]; webSpringBean.syncGrailsRoles(grailsRoles); } //http://localhost:8080/remote/action?host=www.hsg-wennigsen-gehrden.de&requestPath=de/UnsereMannschaften&safeguardUsername=null&safeguardPassword=null @RequestMapping(value = "/action", method = RequestMethod.GET) @ResponseBody public String getAction(@RequestParam(value = "host") String hostName, @RequestParam(value = "requestPath") String requestPath, @RequestParam(value = "safeguardUsername", required = false) String safeguardUsername, @RequestParam(value = "safeguardPassword", required = false) String safeguardPassword) throws Exception { // first check for some redirects for this host String viewType = "browser"; // This can be browser for now Map<String, String> propertyMap = this.webSpringBean.getSitemapParameters(hostName, requestPath, viewType, safeguardUsername, safeguardPassword, new HashMap<String, String>()); StringBuffer sb = new StringBuffer(); sb.append("<root>"); sb.append("<params>"); //sb.append("<siteName>" + site.getName() + "</siteName>"); //sb.append("<siteShort>" + site.getShortName() + "</siteShort>"); for (String name : propertyMap.keySet()) { String val = propertyMap.get(name); sb.append("<" + name + ">" + val + "</" + name + ">"); } sb.append("</params>"); sb.append("<content>"); sb.append(getContentParsed(Integer.parseInt(propertyMap.get("viewComponentId")), Boolean.parseBoolean(propertyMap.get("hostIsLiveserver")))); sb.append("</content>"); sb.append("</root>"); return sb.toString(); } // public String resolveRedirect(String hostName, String requestPath, Set<String> formerHostsSet) { // // } // // public String filterNavigation(String navigationXml, Map safeGuardMap) { // // } // // public PersonValue getPerson(Long personId){ // // } // // //@RequestMapping(value = "/navigationage/{refVcID}/{since}/{depth}/{getPUBLSVersion}", method = RequestMethod.GET) // public Date getNavigationAge(Integer refVcId, String since, int depth, boolean getPUBLSVersion){ // // } // // public DepartmentValue getDepartment(Long departmentId){ // // } // // ////@RequestMapping(value="/document/{documentId}", method=RequestMethod.GET) // public byte[] getDocument(Integer documentId){ // // } // // public Integer getSiteForHost(String hostName){ // // } // // public SiteValue getSiteValueForHost(String hostName){ // // } // // public Collection getAllSites(){ // // } // // public ViewComponentValue getViewComponent4Id(Integer viewComponentId){ // // } // // public SiteValue getSite4VCId(Integer viewComponentId){ // // } // // public int getNavigationRootDistance4VCId(Integer viewComponentId){ // // } // // public ViewDocumentValue getViewDocument4ViewComponentId(Integer viewComponentId){ // // } // // public ViewDocumentValue[] getViewDocuments4Site(Integer siteId){ // // } // // public UnitValue getUnit(Integer unitId){ // // } // // public AddressValue getAddress(Long addressId){ // // } // // public TalktimeValue getTalktime(Long talktimeId){ // // } // // public byte[] getThumbnail(Integer pictureId){ // // } // // public byte[] getPreview(Integer pictureId){ // // } // @RequestMapping(value = "/picture/{pictureId}", method = RequestMethod.GET) @ResponseBody public byte[] getPicture(@PathVariable Integer pictureId) throws Exception { return webSpringBean.getPicture(pictureId); } // // public Long getTimestamp4Picture(Integer pictureId){ // // } // // public Long getTimestamp4Document(Integer documentId){ // // } // // // public boolean hasPublishContentVersion(Integer viewComponentId){ // // } // // public UnitValue getUnit4ViewComponent(Integer viewComponentId){ // // } // // public SiteValue getSite4Unit(Integer unitId){ // // } // // public boolean isVisibleForLanguageVersion(ViewComponentValue viewComponentValue, boolean liveServer){ // // } // // public PictureValue getPictureValue(Integer pictureId){ // // } // // public Integer getUnitIdForViewComponent(Integer viewComponentId){ // // } // // public ViewComponentValue getViewComponent4Unit(Integer unitId, Integer viewDocumentId){ // // } // // public ContentValue getContent(Integer contentId){ // // } // // // public long getMaxSiteLastModifiedDate(){ // // } // // public Boolean getLiveserver(String hostName) { // // } }