/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cids.navigator.remote; import Sirius.navigator.connection.SessionManager; import Sirius.navigator.plugin.PluginRegistry; import Sirius.navigator.types.treenode.DefaultMetaTreeNode; import Sirius.navigator.types.treenode.ObjectTreeNode; import Sirius.navigator.ui.ComponentRegistry; import Sirius.server.middleware.types.MetaClass; import Sirius.server.middleware.types.MetaObject; import Sirius.server.middleware.types.MetaObjectNode; import Sirius.server.middleware.types.Node; import org.openide.util.lookup.ServiceProvider; import java.util.ArrayList; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import de.cismet.cids.navigator.utils.ClassCacheMultiple; import de.cismet.cids.navigator.utils.MetaTreeNodeVisualization; import de.cismet.remote.AbstractRESTRemoteControlMethod; import de.cismet.remote.RESTRemoteControlMethod; //Swagger annotations are comented out, due to a incompatibility of slf4j /** * DOCUMENT ME! * * @author thorsten * @version $Revision$, $Date$ */ @Path("/showObjects") //@Api( // value = "/sayHello", // description = "says hello" //) @Produces({ MediaType.APPLICATION_JSON }) @ServiceProvider(service = RESTRemoteControlMethod.class) public class ShowObjectService extends AbstractRESTRemoteControlMethod implements RESTRemoteControlMethod { //~ Static fields/initializers --------------------------------------------- private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ShowObjectService.class); //~ Constructors ----------------------------------------------------------- /** * Creates a new ShowObjectService object. */ public ShowObjectService() { super(-1, "/showObject"); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param domain DOCUMENT ME! * @param tablename DOCUMENT ME! * @param oids DOCUMENT ME! * @param search DOCUMENT ME! * @param map DOCUMENT ME! * @param renderer DOCUMENT ME! * * @return DOCUMENT ME! */ @GET @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_HTML) public Response show(@QueryParam("domain") String domain, @QueryParam("class") final String tablename, @QueryParam("objectids") final String oids, @QueryParam("search") final Boolean search, @QueryParam("map") final Boolean map, @QueryParam("renderer") final Boolean renderer) { try { if (domain == null) { domain = SessionManager.getSession().getUser().getDomain(); } final MetaClass mc = ClassCacheMultiple.getMetaClass(domain, tablename); if (mc == null) { LOG.warn("The Class with the tablename " + tablename + "was not dound in the domain " + domain + "."); return Response.status(Response.Status.BAD_REQUEST).build(); } final StringBuilder query = new StringBuilder("select ").append(mc.getID()) .append(", ") .append(mc.getPrimaryKey()) .append(" from ") .append(mc.getTableName()) .append(" WHERE ") .append(mc.getPrimaryKey()) .append(" in (") .append(oids) .append(");"); // NOI18N final MetaObject[] metaObjects = SessionManager.getProxy() .getMetaObjectByQuery(SessionManager.getSession().getUser(), query.toString(), domain); if ((metaObjects != null) && (metaObjects.length == 0)) { LOG.info("The query " + query.toString() + "returned with no results"); return Response.noContent().build(); } final List<DefaultMetaTreeNode> defaultMetaTreeNodes = new ArrayList<DefaultMetaTreeNode>(); final Node[] newNodes = new Node[metaObjects.length]; int i = 0; for (final MetaObject mo : metaObjects) { final MetaObjectNode node = new MetaObjectNode(mo.getBean()); newNodes[i++] = node; final ObjectTreeNode otn = new ObjectTreeNode(node); defaultMetaTreeNodes.add(otn); } if ((search == null) || search) { ComponentRegistry.getRegistry().getSearchResultsTree().setResultNodes(newNodes, false, null); ComponentRegistry.getRegistry().getGUIContainer().select(ComponentRegistry.SEARCHRESULTS_TREE); } if ((map != null) && map) { PluginRegistry.getRegistry() .getPluginDescriptor("cismap") .getUIDescriptor("cismap") .getView() .makeVisible(); MetaTreeNodeVisualization.getInstance().addVisualization(defaultMetaTreeNodes); } if ((renderer != null) && renderer) { ComponentRegistry.getRegistry().getDescriptionPane().setNodesDescriptions(defaultMetaTreeNodes); ComponentRegistry.getRegistry().getGUIContainer().select(ComponentRegistry.DESCRIPTION_PANE); } } catch (Exception e) { LOG.error("Problem during remote-showing an object", e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build(); } return Response.ok("ok").build(); } }