import java.util.List;
import java.util.UUID;
+import net.sf.json.JsonConfig;
+
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import eu.etaxonomy.cdm.remote.controller.FeatureTreeController;
import eu.etaxonomy.cdm.remote.controller.FeatureTreeListController;
import eu.etaxonomy.cdm.remote.controller.NameController;
-import eu.etaxonomy.cdm.remote.controller.TaxonNodeController;
-import eu.etaxonomy.cdm.remote.controller.TaxonNodeListController;
+import eu.etaxonomy.cdm.remote.controller.TaxonNodePrintAppController;
import eu.etaxonomy.cdm.remote.controller.TaxonPortalController;
import eu.etaxonomy.cdm.remote.controller.dto.PolytomousKeyNodeDtoController;
import eu.etaxonomy.cdm.remote.view.JsonView;
import eu.etaxonomy.cdm.remote.view.JsonView.Type;
-import net.sf.json.JsonConfig;
/**
* The local entity factory assumes that an application context is available and
@Autowired
private ClassificationController classificationController;
@Autowired
- private TaxonNodeListController taxonNodeListController;
- @Autowired
- private TaxonNodeController taxonNodeController;
+ private TaxonNodePrintAppController taxonNodePrintAppController;
@Autowired
private NameController nameController;
@Autowired
.getBean("classificationListController");
classificationController = (ClassificationController) applicationConfiguration
.getBean("classificationController");
- taxonNodeListController = (TaxonNodeListController) applicationConfiguration
- .getBean("taxonNodeListController");
- taxonNodeController = (TaxonNodeController) applicationConfiguration
- .getBean("taxonNodeController");
+ taxonNodePrintAppController = (TaxonNodePrintAppController) applicationConfiguration
+ .getBean("taxonNodePrintAppController");
nameController = (NameController) applicationConfiguration
.getBean("nameController");
resultObject = classificationController.getChildNodes(uuid,
null);
} else if (EntityType.TAXON_NODE.equals(entityType)) {
- resultObject = taxonNodeListController
+ resultObject = taxonNodePrintAppController
.getChildNodes(uuid, null);
}
} catch (IOException e) {
xmlView.setJsonConfig(jsonConfig);
Object resultObject = null;
try {
- resultObject = taxonNodeController.doGet(taxonNodeUuid, null, null);
+ resultObject = taxonNodePrintAppController.doGet(taxonNodeUuid, null, null);
} catch (IOException e) {
monitor.warning(e.getLocalizedMessage(), e);
logger.error(e);
Object resultObject = null;
try {
- resultObject = taxonNodeController.getCdmBaseProperty(uuid,
- "taxon", null);
+ resultObject = taxonNodePrintAppController.doGetTaxon(uuid);
} catch (IOException e) {
monitor.warning(e.getLocalizedMessage(), e);
logger.error(e);
import io.swagger.annotations.Api;
-import java.util.Arrays;
-import java.util.List;
+import java.io.IOException;
+import java.util.UUID;
+
+import javax.servlet.http.HttpServletResponse;
-import org.apache.log4j.Logger;
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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.NodeSortMode;
+import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.remote.controller.util.PagerParameters;
/**
- * @author n.hoffmann
- * @created Apr 9, 2010
- * @version 1.0
+ *
+ * @author a.kohlbecker
+ * @date Jun 13, 2016
+ *
*/
@Controller
@Api("taxonNode")
@RequestMapping(value = {"/taxonNode/{uuid}"})
-public class TaxonNodeController extends BaseController<TaxonNode, ITaxonNodeService> {
- @SuppressWarnings("unused")
- private static final Logger logger = Logger
- .getLogger(TaxonNodeController.class);
-
- private static final List<String> NODE_INIT_STRATEGY = Arrays.asList(new String[]{
- "taxon.sec",
- "taxon.name"
- });
-
- public TaxonNodeController(){
- super();
- setInitializationStrategy(NODE_INIT_STRATEGY);
- }
+public class TaxonNodeController extends AbstractController<TaxonNode, ITaxonNodeService> {
+
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.remote.controller.BaseController#setService(eu.etaxonomy.cdm.api.service.IService)
public void setService(ITaxonNodeService service) {
this.service = service;
}
+
+
+ /**
+ *
+ * @param uuid
+ * @param response
+ * @return
+ * @throws IOException
+ */
+ @RequestMapping(
+ value = {"parent"},
+ method = RequestMethod.GET)
+ public TaxonNodeDto doGetParent(
+ @PathVariable("uuid") UUID uuid,
+ HttpServletResponse response
+ ) throws IOException {
+
+ return service.parentDto(uuid);
+ }
+
+ /**
+ *
+ * @param uuid
+ * @param pageIndex
+ * @param pageSize
+ * @param sortMode
+ * @param response
+ * @return
+ * @throws IOException
+ */
+ @RequestMapping(
+ value = {"childNodes"},
+ method = RequestMethod.GET)
+ public Pager<TaxonNodeDto> doPageChildNodes(
+ @PathVariable("uuid") UUID uuid,
+ @RequestParam(value = "pageNumber", required = false) Integer pageIndex,
+ @RequestParam(value = "pageSize", required = false) Integer pageSize,
+ @RequestParam(value="sortMode", defaultValue="AlphabeticalOrder") NodeSortMode sortMode,
+ HttpServletResponse response
+ ) throws IOException {
+
+ PagerParameters pagerParameters = new PagerParameters(pageSize, pageIndex);
+ pagerParameters.normalizeAndValidate(response);
+
+ return service.pageChildNodesDTOs(uuid, false, sortMode, pagerParameters.getPageSize(), pagerParameters.getPageIndex());
+ }
}
package eu.etaxonomy.cdm.remote.controller;
-import io.swagger.annotations.Api;
-
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
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.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.stereotype.Component;
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
/**
+ * This class once was a controller but is no longer needed as such.
+ * The cdmlib-print project however still relies on this class being present to
+ * access its methods directly, but is not using it as controller, though
+ *
+ *
* @author n.hoffmann
* @created Apr 8, 2010
+ *
+ * @deprecated only used by cdmlib-print in an unorthodox way to get cdm entities as xml
*/
-@Controller
-@Api("taxonNode")
-public class TaxonNodeListController extends AbstractController<TaxonNode, ITaxonNodeService> {
+@Deprecated
+@Component
+public class TaxonNodePrintAppController extends AbstractController<TaxonNode, ITaxonNodeService> {
@SuppressWarnings("unused")
- private static final Logger logger = Logger.getLogger(TaxonNodeListController.class);
+ private static final Logger logger = Logger.getLogger(TaxonNodePrintAppController.class);
private static final List<String> NODE_INIT_STRATEGY = Arrays.asList(new String[]{
* @param response
* @return
* @throws IOException
+ *
+ * @deprecated use the TaxonNodeController.doPageChildNodes() instead,
+ * has no request mapping to avoid conflicts with that method
*/
- @RequestMapping(
- value = {"//taxonNode/{taxonNodeUuid}/childNodes"},
- method = RequestMethod.GET)
+ @Deprecated
public List<TaxonNode> getChildNodes(
- @PathVariable("taxonNodeUuid") UUID taxonNodeUuid,
+ UUID taxonNodeUuid,
HttpServletResponse response
) throws IOException {
return service.loadChildNodesOfTaxonNode(taxonNode, NODE_INIT_STRATEGY, false, null);
}
+ public TaxonNode doGet(UUID taxonNodeUuid, HttpServletRequest request, HttpServletResponse response
+ ) throws IOException {
+ return service.load(taxonNodeUuid, getInitializationStrategy());
+ }
+
+ public TaxonBase doGetTaxon(UUID taxonNodeUuid) throws IOException {
+ TaxonNode taxonNode = service.load(taxonNodeUuid, getInitializationStrategy());
+ return taxonNode.getTaxon();
+ }
+
}
import java.util.List;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.strategy.cache.TaggedText;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonBeanProcessor;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.strategy.cache.TaggedText;
/**
* @author a.kohlbecker
* @date 29.07.2010
*
+ * @deprecated use the eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto instead for all classification web service endpoints
*/
+@Deprecated
public class TaxonNodeDtoBeanProcessor implements JsonBeanProcessor {
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
/**
*/
public List<TaxonNode> loadChildNodesOfTaxonNode(TaxonNode taxonNode, List<String> propertyPaths, boolean recursive, NodeSortMode sortMode);
+ /**
+ *returns the childnodes of the taxonNode, if recursive is true it returns all descendants, if sort is true the nodes are sorted
+ *
+ * @param taxonNode
+ * @param recursive
+ * @param sortMode
+ * @param pageSize
+ * @param pageIndex
+ *
+ * @return List<TaxonNodeDto>
+ */
+ public Pager<TaxonNodeDto> pageChildNodesDTOs(UUID taxonNodeUuid, boolean recursive, NodeSortMode sortMode, Integer pageSize, Integer pageIndex);
+
+ public TaxonNodeDto parentDto(UUID taxonNodeUuid);
+
/**
* Changes the taxon associated with the given taxon node into a synonym of the new accepted taxon node.
* All data associated with the former taxon are moved to the newly accepted taxon.
import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.api.service.pager.PagerUtils;
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
+import eu.etaxonomy.cdm.hibernate.HHH_9751_Util;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
import eu.etaxonomy.cdm.model.common.DefinedTerm;
import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonNodeDao;
+import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
/**
* @author n.hoffmann
@Override
public List<TaxonNode> loadChildNodesOfTaxonNode(TaxonNode taxonNode,
List<String> propertyPaths, boolean recursive, NodeSortMode sortMode) {
- taxonNode = dao.load(taxonNode.getUuid());
+
+ getSession().refresh(taxonNode);
List<TaxonNode> childNodes;
if (recursive == true){
childNodes = dao.listChildrenOf(taxonNode, null, null, null, recursive);
}else{
childNodes = new ArrayList<TaxonNode>(taxonNode.getChildNodes());
}
+
+ HHH_9751_Util.removeAllNull(childNodes);
+
if (sortMode != null){
Comparator<TaxonNode> comparator = sortMode.newComparator();
Collections.sort(childNodes, comparator);
return childNodes;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Pager<TaxonNodeDto> pageChildNodesDTOs(UUID taxonNodeUuid, boolean recursive, NodeSortMode sortMode,
+ Integer pageSize, Integer pageIndex) {
+
+
+ List<TaxonNode> childNodes = loadChildNodesOfTaxonNode(dao.load(taxonNodeUuid), null, recursive, sortMode);
+
+ if (sortMode != null){
+ Comparator<TaxonNode> comparator = sortMode.newComparator();
+ Collections.sort(childNodes, comparator);
+ }
+
+ List<TaxonNodeDto> dtos = new ArrayList<>(pageSize);
+ int start = PagerUtils.startFor(pageSize, pageIndex);
+ int limit = PagerUtils.limitFor(pageSize);
+ Long totalCount = Long.valueOf(childNodes.size());
+ if(PagerUtils.hasResultsInRange(totalCount, pageIndex, pageSize)) {
+ for(int i = start; i < start + limit; i++) {
+ dtos.add(new TaxonNodeDto(childNodes.get(i)));
+ }
+ }
+
+
+ return new DefaultPagerImpl<TaxonNodeDto>(pageIndex, totalCount, pageSize , dtos);
+ }
+
+ @Override
+ public TaxonNodeDto parentDto(UUID taxonNodeUuid) {
+ TaxonNode taxonNode = dao.load(taxonNodeUuid);
+ if(taxonNode.getParent() != null) {
+ return new TaxonNodeDto(taxonNode.getParent());
+ }
+ return null;
+ }
+
@Override
@Autowired
protected void setDao(ITaxonNodeDao dao) {
return result;
}
+
}