List of usage examples for java.util Set containsAll
boolean containsAll(Collection<?> c);
From source file:org.ballerinalang.bre.bvm.BVM.java
private static boolean checkIsRecordType(BType sourceType, BRecordType targetType, List<TypePair> unresolvedTypes) { if (sourceType.getTag() != TypeTags.RECORD_TYPE_TAG) { return false; }/* www. j av a 2s .c om*/ // If we encounter two types that we are still resolving, then skip it. // This is done to avoid recursive checking of the same type. TypePair pair = new TypePair(sourceType, targetType); if (unresolvedTypes.contains(pair)) { return true; } unresolvedTypes.add(pair); // Unsealed records are not equivalent to sealed records. But vice-versa is allowed. BRecordType sourceRecordType = (BRecordType) sourceType; if (targetType.sealed && !sourceRecordType.sealed) { return false; } // If both are sealed (one is sealed means other is also sealed) check the rest field type if (!sourceRecordType.sealed && !checkIsType(sourceRecordType.restFieldType, targetType.restFieldType, unresolvedTypes)) { return false; } Map<String, BField> sourceFields = sourceRecordType.getFields(); Set<String> targetFieldNames = targetType.getFields().keySet(); for (BField targetField : targetType.getFields().values()) { BField sourceField = sourceFields.get(targetField.getFieldName()); // If the LHS field is a required one, there has to be a corresponding required field in the RHS record. if (!Flags.isFlagOn(targetField.flags, Flags.OPTIONAL) && (sourceField == null || Flags.isFlagOn(sourceField.flags, Flags.OPTIONAL))) { return false; } if (sourceField == null || !checkIsType(sourceField.fieldType, targetField.fieldType, unresolvedTypes)) { return false; } } // If there are fields remaining in the source record, first check if it's a closed record. Closed records // should only have the fields specified by its type. if (targetType.sealed) { return targetFieldNames.containsAll(sourceFields.keySet()); } // If it's an open record, check if they are compatible with the rest field of the target type. return sourceFields.values().stream().filter(field -> !targetFieldNames.contains(field.fieldName)) .allMatch(field -> checkIsType(field.getFieldType(), targetType.restFieldType, unresolvedTypes)); }
From source file:org.apache.bookkeeper.client.RegionAwareEnsemblePlacementPolicy.java
@Override public ArrayList<BookieSocketAddress> newEnsemble(int ensembleSize, int writeQuorumSize, int ackQuorumSize, java.util.Map<String, byte[]> customMetadata, Set<BookieSocketAddress> excludeBookies) throws BKException.BKNotEnoughBookiesException { int effectiveMinRegionsForDurability = disableDurabilityFeature.isAvailable() ? 1 : minRegionsForDurability; // All of these conditions indicate bad configuration if (ackQuorumSize < effectiveMinRegionsForDurability) { throw new IllegalArgumentException( "Ack Quorum size provided are insufficient to meet the durability constraints"); } else if (ensembleSize < writeQuorumSize) { throw new IllegalArgumentException( "write quorum (" + writeQuorumSize + ") cannot exceed ensemble size (" + ensembleSize + ")"); } else if (writeQuorumSize < ackQuorumSize) { throw new IllegalArgumentException( "ack quorum (" + ackQuorumSize + ") cannot exceed write quorum size (" + writeQuorumSize + ")"); } else if (effectiveMinRegionsForDurability > 0) { // We must survive the failure of numRegions - effectiveMinRegionsForDurability. When these // regions have failed we would spread the replicas over the remaining // effectiveMinRegionsForDurability regions; we have to make sure that the ack quorum is large // enough such that there is a configuration for spreading the replicas across // effectiveMinRegionsForDurability - 1 regions if (ackQuorumSize <= (writeQuorumSize - (writeQuorumSize / effectiveMinRegionsForDurability))) { throw new IllegalArgumentException("ack quorum (" + ackQuorumSize + ") " + "violates the requirement to satisfy durability constraints when running in degraded mode"); }/* w ww .java2 s . c o m*/ } rwLock.readLock().lock(); try { Set<Node> excludeNodes = convertBookiesToNodes(excludeBookies); Set<String> availableRegions = new HashSet<String>(); for (String region : perRegionPlacement.keySet()) { if ((null == disallowBookiePlacementInRegionFeatureName) || !featureProvider.scope(region) .getFeature(disallowBookiePlacementInRegionFeatureName).isAvailable()) { availableRegions.add(region); } } int numRegionsAvailable = availableRegions.size(); // If we were unable to get region information or all regions are disallowed which is // an invalid configuration; default to random selection from the set of nodes if (numRegionsAvailable < 1) { // We cant disallow all regions; if we did, raise an alert to draw attention if (perRegionPlacement.keySet().size() >= 1) { LOG.error("No regions available, invalid configuration"); } List<BookieNode> bns = selectRandom(ensembleSize, excludeNodes, TruePredicate.instance, EnsembleForReplacementWithNoConstraints.instance); ArrayList<BookieSocketAddress> addrs = new ArrayList<BookieSocketAddress>(ensembleSize); for (BookieNode bn : bns) { addrs.add(bn.getAddr()); } return addrs; } // Single region, fall back to RackAwareEnsemblePlacement if (numRegionsAvailable < 2) { RRTopologyAwareCoverageEnsemble ensemble = new RRTopologyAwareCoverageEnsemble(ensembleSize, writeQuorumSize, ackQuorumSize, REGIONID_DISTANCE_FROM_LEAVES, effectiveMinRegionsForDurability > 0 ? new HashSet<String>(perRegionPlacement.keySet()) : null, effectiveMinRegionsForDurability); TopologyAwareEnsemblePlacementPolicy nextPolicy = perRegionPlacement .get(availableRegions.iterator().next()); return nextPolicy.newEnsemble(ensembleSize, writeQuorumSize, writeQuorumSize, excludeBookies, ensemble, ensemble); } int remainingEnsemble = ensembleSize; int remainingWriteQuorum = writeQuorumSize; // Equally distribute the nodes across all regions to whatever extent possible // with the hierarchy in mind // Try and place as many nodes in a region as possible, the ones that cannot be // accommodated are placed on other regions // Within each region try and follow rack aware placement Map<String, Pair<Integer, Integer>> regionsWiseAllocation = new HashMap<String, Pair<Integer, Integer>>(); for (String region : availableRegions) { regionsWiseAllocation.put(region, Pair.of(0, 0)); } int remainingEnsembleBeforeIteration; int numRemainingRegions; Set<String> regionsReachedMaxAllocation = new HashSet<String>(); RRTopologyAwareCoverageEnsemble ensemble; do { numRemainingRegions = numRegionsAvailable - regionsReachedMaxAllocation.size(); ensemble = new RRTopologyAwareCoverageEnsemble(ensembleSize, writeQuorumSize, ackQuorumSize, REGIONID_DISTANCE_FROM_LEAVES, // We pass all regions we know off to the coverage ensemble as // regardless of regions that are available; constraints are // always applied based on all possible regions effectiveMinRegionsForDurability > 0 ? new HashSet<String>(perRegionPlacement.keySet()) : null, effectiveMinRegionsForDurability); remainingEnsembleBeforeIteration = remainingEnsemble; int regionsToAllocate = numRemainingRegions; for (Map.Entry<String, Pair<Integer, Integer>> regionEntry : regionsWiseAllocation.entrySet()) { String region = regionEntry.getKey(); final Pair<Integer, Integer> currentAllocation = regionEntry.getValue(); TopologyAwareEnsemblePlacementPolicy policyWithinRegion = perRegionPlacement.get(region); if (!regionsReachedMaxAllocation.contains(region)) { if (numRemainingRegions <= 0) { LOG.error("Inconsistent State: This should never happen"); throw new BKException.BKNotEnoughBookiesException(); } // try to place the bookies as balance as possible across all the regions int addToEnsembleSize = Math.min(remainingEnsemble, remainingEnsemble / regionsToAllocate + (remainingEnsemble % regionsToAllocate == 0 ? 0 : 1)); boolean success = false; while (addToEnsembleSize > 0) { int addToWriteQuorum = Math.max(1, Math.min(remainingWriteQuorum, Math.round(1.0f * writeQuorumSize * addToEnsembleSize / ensembleSize))); // Temp ensemble will be merged back into the ensemble only if we are able to successfully allocate // the target number of bookies in this region; if we fail because we dont have enough bookies; then we // retry the process with a smaller target RRTopologyAwareCoverageEnsemble tempEnsemble = new RRTopologyAwareCoverageEnsemble( ensemble); int newEnsembleSize = currentAllocation.getLeft() + addToEnsembleSize; int newWriteQuorumSize = currentAllocation.getRight() + addToWriteQuorum; try { List<BookieSocketAddress> allocated = policyWithinRegion.newEnsemble( newEnsembleSize, newWriteQuorumSize, newWriteQuorumSize, excludeBookies, tempEnsemble, tempEnsemble); ensemble = tempEnsemble; remainingEnsemble -= addToEnsembleSize; remainingWriteQuorum -= addToWriteQuorum; regionsWiseAllocation.put(region, Pair.of(newEnsembleSize, newWriteQuorumSize)); success = true; regionsToAllocate--; LOG.info( "Region {} allocating bookies with ensemble size {} and write quorum size {} : {}", new Object[] { region, newEnsembleSize, newWriteQuorumSize, allocated }); break; } catch (BKException.BKNotEnoughBookiesException exc) { LOG.warn("Could not allocate {} bookies in region {}, try allocating {} bookies", new Object[] { newEnsembleSize, region, (newEnsembleSize - 1) }); addToEnsembleSize--; } } // we couldn't allocate additional bookies from the region, // it should have reached its max allocation. if (!success) { regionsReachedMaxAllocation.add(region); } } if (regionsReachedMaxAllocation.contains(region)) { if (currentAllocation.getLeft() > 0) { LOG.info("Allocating {} bookies in region {} : ensemble {} exclude {}", new Object[] { currentAllocation.getLeft(), region, excludeBookies, ensemble }); policyWithinRegion.newEnsemble(currentAllocation.getLeft(), currentAllocation.getRight(), currentAllocation.getRight(), excludeBookies, ensemble, ensemble); LOG.info("Allocated {} bookies in region {} : {}", new Object[] { currentAllocation.getLeft(), region, ensemble }); } } } if (regionsReachedMaxAllocation.containsAll(regionsWiseAllocation.keySet())) { break; } } while ((remainingEnsemble > 0) && (remainingEnsemble < remainingEnsembleBeforeIteration)); ArrayList<BookieSocketAddress> bookieList = ensemble.toList(); if (ensembleSize != bookieList.size()) { LOG.error("Not enough {} bookies are available to form an ensemble : {}.", ensembleSize, bookieList); throw new BKException.BKNotEnoughBookiesException(); } if (enableValidation && !ensemble.validate()) { LOG.error("Not enough {} bookies are available to form a valid ensemble : {}.", ensembleSize, bookieList); throw new BKException.BKNotEnoughBookiesException(); } LOG.info("Bookies allocated successfully {}", ensemble); return ensemble.toList(); } finally { rwLock.readLock().unlock(); } }
From source file:com.net2plan.interfaces.networkDesign.NetPlan.java
/** * <p>For debug purposes: Checks the consistency of the internal cache (nodes, srgs, resources, layers, links, demands, multicast demands, multicast trees, routes). If any * inconsistency is found an exception is thrown.</p> *///from www . j av a 2 s.c om public void checkCachesConsistency() { // System.out.println ("Check caches consistency of object: " + hashCode()); checkCachesConsistency(nodes, cache_id2NodeMap, true); checkCachesConsistency(srgs, cache_id2srgMap, true); checkCachesConsistency(resources, cache_id2ResourceMap, true); checkCachesConsistency(layers, cache_id2LayerMap, true); for (NetworkLayer layer : layers) { checkCachesConsistency(layer.links, cache_id2LinkMap, false); checkCachesConsistency(layer.demands, cache_id2DemandMap, false); checkCachesConsistency(layer.multicastDemands, cache_id2MulticastDemandMap, false); checkCachesConsistency(layer.multicastTrees, cache_id2MulticastTreeMap, false); checkCachesConsistency(layer.routes, cache_id2RouteMap, false); } this.checkInThisNetPlan(nodes); this.checkInThisNetPlan(resources); this.checkInThisNetPlan(srgs); this.checkInThisNetPlan(layers); this.checkInThisNetPlan(defaultLayer); /* What is in the cache is correct */ for (String type : cache_type2Resources.keySet()) for (Resource r : cache_type2Resources.get(type)) if (!r.type.equals(type)) throw new RuntimeException("Bad"); for (Node node : nodes) node.checkCachesConsistency(); for (Resource res : resources) res.checkCachesConsistency(); for (SharedRiskGroup srg : srgs) srg.checkCachesConsistency(); for (NetworkLayer layer : layers) { this.checkInThisNetPlanAndLayer(layer.links, layer); this.checkInThisNetPlanAndLayer(layer.demands, layer); this.checkInThisNetPlanAndLayer(layer.multicastDemands, layer); this.checkInThisNetPlanAndLayer(layer.multicastTrees, layer); this.checkInThisNetPlanAndLayer(layer.routes, layer); layer.checkCachesConsistency(); for (Link link : layer.links) link.checkCachesConsistency(); for (Demand demand : layer.demands) demand.checkCachesConsistency(); for (MulticastDemand demand : layer.multicastDemands) demand.checkCachesConsistency(); for (Route route : layer.routes) route.checkCachesConsistency(); for (MulticastTree tree : layer.multicastTrees) tree.checkCachesConsistency(); if (layer.routingType == RoutingType.HOP_BY_HOP_ROUTING) { for (int d = 0; d < layer.demands.size(); d++) { final Demand demand = layer.demands.get(d); for (int e = 0; e < layer.links.size(); e++) { final Link link = layer.links.get(e); final double f_de = layer.forwardingRulesNoFailureState_f_de.get(d, e); final double x_de = layer.forwardingRulesCurrentFailureState_x_de.get(d, e); if (f_de < 0) throw new RuntimeException("Bad"); if (f_de > 1) throw new RuntimeException("Bad"); final Node a_e = layer.links.get(e).originNode; double linkInitialNodeOutTraffic = 0; double linkInitialNodeOutRules = 0; for (Link outLink : a_e.getOutgoingLinks(layer)) { final int out_a_e = outLink.index; linkInitialNodeOutTraffic += layer.forwardingRulesCurrentFailureState_x_de.get(d, out_a_e); linkInitialNodeOutRules += layer.forwardingRulesNoFailureState_f_de.get(d, out_a_e); } final boolean linkUp = link.isUp && link.originNode.isUp && link.destinationNode.isUp; double linkInitialNodeInTraffic = (link.originNode == demand.ingressNode) ? demand.offeredTraffic : 0; for (Link inLink : a_e.getIncomingLinks(layer)) linkInitialNodeInTraffic += layer.forwardingRulesCurrentFailureState_x_de.get(d, inLink.index); if (linkInitialNodeOutRules > 1 + 1E-3) throw new RuntimeException("Bad"); if (!linkUp && (x_de > 1E-3)) throw new RuntimeException("Bad. outTraffic: " + linkInitialNodeOutTraffic + " and link " + link + " is down. NetPlan: " + this); if (linkUp && (linkInitialNodeInTraffic > 1e-3)) if (Math.abs(f_de - x_de / linkInitialNodeInTraffic) > 1e-4) throw new RuntimeException("Bad. demand index: " + d + ", link : " + link + " (isUp? )" + link.isUp + ", nodeInTraffic: " + linkInitialNodeInTraffic + ", x_de: " + x_de + ", f_de: " + f_de + ", f_de - x_de/nodeInTraffic: " + (f_de - x_de / linkInitialNodeInTraffic)); if (linkInitialNodeOutTraffic < 1e-3) if (x_de > 1e-3) throw new RuntimeException("Bad"); } } } } /* Check the interlayer object */ Set<NetworkLayer> layersAccordingToInterLayer = interLayerCoupling.vertexSet(); if (!layersAccordingToInterLayer.containsAll(layers)) throw new RuntimeException("Bad"); if (layersAccordingToInterLayer.size() != layers.size()) throw new RuntimeException("Bad"); for (DemandLinkMapping mapping : interLayerCoupling.edgeSet()) { NetworkLayer linkLayer = mapping.getLinkSideLayer(); NetworkLayer demandLayer = mapping.getDemandSideLayer(); linkLayer.checkAttachedToNetPlanObject(this); demandLayer.checkAttachedToNetPlanObject(this); for (Entry<Demand, Link> e : mapping.getDemandMap().entrySet()) { e.getKey().checkAttachedToNetPlanObject(this); e.getValue().checkAttachedToNetPlanObject(this); } } if (layers.get(defaultLayer.index) != defaultLayer) throw new RuntimeException("Bad"); }
From source file:org.mindswap.swoop.renderer.entity.ConciseFormatEntityRenderer.java
public Set expandAxiomSet(Set axioms, OWLOntology ont, boolean expandMore) { try {//from ww w. ja v a2s . c o m Set newEntities = new HashSet(); for (Iterator iter = new HashSet(axioms).iterator(); iter.hasNext();) { OWLObject axiom = (OWLObject) iter.next(); if (signatureMap.containsKey(axiom)) { newEntities.addAll((HashSet) signatureMap.get(axiom)); } else { Set ents = swoopModel.getAxiomSignature(axiom, ont); signatureMap.put(axiom, ents); newEntities.addAll(ents); } if (expandMore) { // expand entity set to include usage entities for (Iterator iter2 = new HashSet(newEntities).iterator(); iter2.hasNext();) { Set usage = new HashSet(); OWLEntity ent = (OWLEntity) iter2.next(); // check in local cache first before using OntologyHelper if (usageMap.containsKey(ent.getURI())) { usage = (HashSet) usageMap.get(ent.getURI()); } else { usage = OntologyHelper.entityUsage(ont, ent); usageMap.put(ent.getURI(), usage); } // only add entities because axioms are returned for (Iterator it = usage.iterator(); it.hasNext();) { Object e = it.next(); if (e instanceof OWLEntity) newEntities.add(e); else if (e instanceof OWLObject) { if (signatureMap.containsKey(e)) { newEntities.addAll((HashSet) signatureMap.get(e)); } else { Set ents = swoopModel.getAxiomSignature((OWLObject) e, ont); signatureMap.put(e, ents); newEntities.addAll(ents); } } } } } } // get axioms for all newEntities either from local cache or from swoopModel Set newAxioms = new HashSet(); for (Iterator iter2 = newEntities.iterator(); iter2.hasNext();) { OWLEntity ent = (OWLEntity) iter2.next(); if (axiomMap.containsKey(ent.getURI())) { newAxioms.addAll((HashSet) axiomMap.get(ent.getURI())); } else { Set ax = swoopModel.getAxioms(ent, ont); axiomMap.put(ent.getURI(), ax); newAxioms.addAll(ax); } } if (axioms.containsAll(newAxioms)) { return new HashSet(); } else { // determine latest axioms Set before = new HashSet(axioms); Set latest = new HashSet(axioms); latest.addAll(newAxioms); latest.removeAll(before); // // set a limit on axioms to be added if (latest.size() > axiomLimit) { // only let limited entities remain in latest Set copyLatest = new HashSet(latest); latest.clear(); for (int ctr = 0; ctr < axiomLimit; ctr++) { Object ax = copyLatest.iterator().next(); latest.add(ax); copyLatest.remove(ax); } axiomLimit *= 1.25; // slowly increase axiom limit } newAxioms = latest; axioms.addAll(newAxioms); return newAxioms; } } catch (Exception ex) { ex.printStackTrace(); } return new HashSet(); }
From source file:org.sakaiproject.webservices.SakaiScript.java
/** * Copies a role from one authzgroup to another. Useful for mass population/synchronisation * <p/>/*from w w w.j av a 2 s. co m*/ * The sessionid argument must be a valid session for a super user ONLY otherwise it will fail. * The authzgroup arguments for sites should start with /site/SITEID, likewise for site groups etc * * @param sessionid the sessionid of a valid session for the admin user * @param authzgroupid1 the authgroupid of the site you want to copy the role FROM * @param authzgroupid2 the authgroupid of the site you want to copy the role TO * @param roleid the id of the role you want to copy * @param description the description of the new role * @param removeBeforeSync if synchronising roles, whether or not to remove the functions from the target role before adding the set in. This will * mean that no additional permissions will remain, if they already exist in that role * @return success or RuntimeException * @throws RuntimeException if not a super user, if new role cannot be created, if functions differ after the new role is made */ @WebMethod @Path("/copyRole2") @Produces("text/plain") @GET public String copyRole2( @WebParam(name = "sessionid", partName = "sessionid") @QueryParam("sessionid") String sessionid, @WebParam(name = "authzgroupid1", partName = "authzgroupid1") @QueryParam("authzgroupid1") String authzgroupid1, @WebParam(name = "authzgroupid2", partName = "authzgroupid2") @QueryParam("authzgroupid2") String authzgroupid2, @WebParam(name = "roleid", partName = "roleid") @QueryParam("roleid") String roleid, @WebParam(name = "description", partName = "description") @QueryParam("description") String description, @WebParam(name = "removeBeforeSync", partName = "removeBeforeSync") @QueryParam("removeBeforeSync") boolean removeBeforeSync) { Session session = establishSession(sessionid); Set existingfunctions; Set newfunctions; Set existingroles; ArrayList existingroleids; Iterator iRoles; boolean createRole = false; Role role2; //check that ONLY super user's are accessing this if (!securityService.isSuperUser(session.getUserId())) { LOG.warn("WS copyRole2(): Permission denied. Restricted to super users."); throw new RuntimeException("WS copyRole(): Permission denied. Restricted to super users."); } try { //open authzgroup1 AuthzGroup authzgroup1 = authzGroupService.getAuthzGroup(authzgroupid1); //get role that we want to copy Role role1 = authzgroup1.getRole(roleid); //get functions that are in this role existingfunctions = role1.getAllowedFunctions(); LOG.warn("WS copyRole(): existing functions in role " + roleid + " in " + authzgroupid1 + ": " + new ArrayList(existingfunctions).toString()); //open authzgroup2 AuthzGroup authzgroup2 = authzGroupService.getAuthzGroup(authzgroupid2); //get roles in authzgroup2 existingroles = authzgroup2.getRoles(); existingroleids = new ArrayList(); //iterate over roles, get the roleId from the role, add to arraylist for checking for (iRoles = existingroles.iterator(); iRoles.hasNext();) { Role existingrole = (Role) iRoles.next(); existingroleids.add(existingrole.getId()); } LOG.warn("WS copyRole2(): existing roles in " + authzgroupid2 + ": " + existingroleids.toString()); //if this roleid exists in the authzgroup already... if (existingroleids.contains(roleid)) { LOG.warn("WS copyRole2(): role " + roleid + " exists in " + authzgroupid2 + ". This role will updated."); } else { LOG.warn("WS copyRole2(): role " + roleid + " does not exist in " + authzgroupid2 + ". This role will be created."); //create this role in authzgroup2 role2 = authzgroup2.addRole(roleid); //save authzgroup change authzGroupService.save(authzgroup2); //reopen authzgroup2 for checking authzgroup2 = authzGroupService.getAuthzGroup(authzgroupid2); //check the role was actually created by getting set again and iterating existingroles = authzgroup2.getRoles(); existingroleids = new ArrayList(); //iterate over roles, get the roleId from the role, add to arraylist for checking for (iRoles = existingroles.iterator(); iRoles.hasNext();) { Role existingrole = (Role) iRoles.next(); existingroleids.add(existingrole.getId()); } LOG.warn("WS copyRole2(): existing roles in " + authzgroupid2 + " after addition: " + existingroleids.toString()); //if role now exists, ok, else fault. if (existingroleids.contains(roleid)) { LOG.warn("WS copyRole2(): role " + roleid + " was created in " + authzgroupid2 + "."); } else { LOG.warn("WS copyRole2(): role " + roleid + " could not be created in " + authzgroupid2 + "."); throw new RuntimeException( "WS copyRole2(): role " + roleid + " could not be created in " + authzgroupid2 + "."); } } //get this role role2 = authzgroup2.getRole(roleid); //if removing permissions before syncing (SAK-18019) if (removeBeforeSync) { role2.disallowAll(); } //add Set of functions to this role role2.allowFunctions(existingfunctions); //set description role2.setDescription(description); //save authzgroup change authzGroupService.save(authzgroup2); //reopen authzgroup2 for checking authzgroup2 = authzGroupService.getAuthzGroup(authzgroupid2); //get role we want to check role2 = authzgroup2.getRole(roleid); //get Set of functions that are now in this role newfunctions = role2.getAllowedFunctions(); //compare existingfunctions with newfunctions to see that they match if (newfunctions.containsAll(existingfunctions)) { LOG.warn("WS copyRole2(): functions added successfully to role " + roleid + " in " + authzgroupid2 + "."); } else { LOG.warn("WS copyRole2(): functions in roles differ after addition."); throw new RuntimeException("WS copyRole(): functions in roles differ after addition."); } } catch (Exception e) { return e.getClass().getName() + " : " + e.getMessage(); } return "success"; }
From source file:org.openbaton.nfvo.core.utils.NSDUtils.java
public void checkIntegrity(VirtualNetworkFunctionDescriptor virtualNetworkFunctionDescriptor) throws NetworkServiceIntegrityException { UrlValidator urlValidator = new UrlValidator(); /** check flavours and images */ Set<String> flavors = new HashSet<>(); Set<String> imageNames = new HashSet<>(); Set<String> imageIds = new HashSet<>(); Set<String> internalVirtualLink = new HashSet<>(); // Set<String> virtualLinkDescriptors = new HashSet<>(); Set<String> names = new HashSet<>(); names.clear();//from ww w. ja v a2 s.c o m internalVirtualLink.clear(); if (virtualNetworkFunctionDescriptor.getName() == null || virtualNetworkFunctionDescriptor.getName().isEmpty()) { throw new NetworkServiceIntegrityException("Not found name of VNFD. Must be defined"); } if (virtualNetworkFunctionDescriptor.getType() == null || virtualNetworkFunctionDescriptor.getType().isEmpty()) { throw new NetworkServiceIntegrityException( "Not found type of VNFD " + virtualNetworkFunctionDescriptor.getName()); } if (virtualNetworkFunctionDescriptor.getDeployment_flavour() != null && !virtualNetworkFunctionDescriptor.getDeployment_flavour().isEmpty()) { for (DeploymentFlavour deploymentFlavour : virtualNetworkFunctionDescriptor.getDeployment_flavour()) { if (deploymentFlavour.getFlavour_key() != null && !deploymentFlavour.getFlavour_key().isEmpty()) { names.add(deploymentFlavour.getFlavour_key()); } else { throw new NetworkServiceIntegrityException("Deployment flavor of VNFD " + virtualNetworkFunctionDescriptor.getName() + " is not well defined"); } } } else { for (VirtualDeploymentUnit vdu : virtualNetworkFunctionDescriptor.getVdu()) { if (vdu.getComputation_requirement() == null || vdu.getComputation_requirement().isEmpty()) { throw new NetworkServiceIntegrityException("Flavour must be set in VNFD or all VDUs: " + virtualNetworkFunctionDescriptor.getName() + ". Come on... check the PoP page and pick at least one " + "DeploymentFlavor"); } else { names.add(vdu.getComputation_requirement()); } } } if (virtualNetworkFunctionDescriptor.getEndpoint() == null || virtualNetworkFunctionDescriptor.getEndpoint().isEmpty()) { throw new NetworkServiceIntegrityException( "Not found endpoint in VNFD " + virtualNetworkFunctionDescriptor.getName()); } if (virtualNetworkFunctionDescriptor.getVdu() == null || virtualNetworkFunctionDescriptor.getVdu().size() == 0) throw new NetworkServiceIntegrityException( "Not found any VDU defined in VNFD \" + virtualNetworkFunctionDescriptor.getName()"); int i = 1; for (VirtualDeploymentUnit vdu : virtualNetworkFunctionDescriptor.getVdu()) { if (vdu.getVnfc() == null || vdu.getVnfc().size() == 0) throw new NetworkServiceIntegrityException( "Not found any VNFC in VDU of VNFD " + virtualNetworkFunctionDescriptor.getName()); if (vdu.getName() == null || vdu.getName().isEmpty()) { vdu.setName(virtualNetworkFunctionDescriptor.getName() + "-" + i); i++; } if (vdu.getVm_image() == null || vdu.getVm_image().isEmpty()) { throw new NetworkServiceIntegrityException( "Not found image in a VDU of VNFD " + virtualNetworkFunctionDescriptor.getName()); } vdu.setProjectId(virtualNetworkFunctionDescriptor.getProjectId()); } if (virtualNetworkFunctionDescriptor.getVirtual_link() != null) { for (InternalVirtualLink vl : virtualNetworkFunctionDescriptor.getVirtual_link()) { if (vl.getName() == null || Objects.equals(vl.getName(), "")) throw new NetworkServiceIntegrityException( "The vnfd: " + virtualNetworkFunctionDescriptor.getName() + " has a virtual link with no name specified"); } } if (virtualNetworkFunctionDescriptor.getLifecycle_event() != null) { for (LifecycleEvent event : virtualNetworkFunctionDescriptor.getLifecycle_event()) { if (event == null) { throw new NetworkServiceIntegrityException("LifecycleEvent is null"); } else if (event.getEvent() == null) { throw new NetworkServiceIntegrityException("Event in one LifecycleEvent does not exist"); } } } if (virtualNetworkFunctionDescriptor.getVirtual_link() != null) { for (InternalVirtualLink internalVirtualLink1 : virtualNetworkFunctionDescriptor.getVirtual_link()) { internalVirtualLink.add(internalVirtualLink1.getName()); } } else { virtualNetworkFunctionDescriptor.setVirtual_link(new HashSet<InternalVirtualLink>()); } if (virtualNetworkFunctionDescriptor.getVnfPackageLocation() != null) { if (urlValidator.isValid(virtualNetworkFunctionDescriptor.getVnfPackageLocation())) { // this is a script link VNFPackage vnfPackage = new VNFPackage(); vnfPackage.setScriptsLink(virtualNetworkFunctionDescriptor.getVnfPackageLocation()); vnfPackage.setName(virtualNetworkFunctionDescriptor.getName()); vnfPackage.setProjectId(virtualNetworkFunctionDescriptor.getProjectId()); vnfPackage = vnfPackageRepository.save(vnfPackage); virtualNetworkFunctionDescriptor.setVnfPackageLocation(vnfPackage.getId()); } } else log.warn("vnfPackageLocation is null. Are you sure?"); if (virtualNetworkFunctionDescriptor.getVdu() != null) { for (VirtualDeploymentUnit virtualDeploymentUnit : virtualNetworkFunctionDescriptor.getVdu()) { if (inAllVims.equals("in-all-vims")) { if (virtualDeploymentUnit.getVimInstanceName() != null && !virtualDeploymentUnit.getVimInstanceName().isEmpty()) { for (String vimName : virtualDeploymentUnit.getVimInstanceName()) { VimInstance vimInstance = null; for (VimInstance vi : vimRepository .findByProjectId(virtualNetworkFunctionDescriptor.getProjectId())) { if (vimName.equals(vi.getName())) { vimInstance = vi; log.debug("Got vim with auth: " + vimInstance.getAuthUrl()); break; } } if (vimInstance == null) { throw new NetworkServiceIntegrityException("Not found VIM with name " + vimName + " referenced by VNFD " + virtualNetworkFunctionDescriptor.getName() + " and VDU " + virtualDeploymentUnit.getName()); } if (virtualDeploymentUnit.getScale_in_out() < 1) { throw new NetworkServiceIntegrityException( "Regarding the VirtualNetworkFunctionDescriptor " + virtualNetworkFunctionDescriptor.getName() + ": in one of the VirtualDeploymentUnit, the scale_in_out" + " parameter (" + virtualDeploymentUnit.getScale_in_out() + ") must be at least 1"); } if (virtualDeploymentUnit.getScale_in_out() < virtualDeploymentUnit.getVnfc().size()) { throw new NetworkServiceIntegrityException( "Regarding the VirtualNetworkFunctionDescriptor " + virtualNetworkFunctionDescriptor.getName() + ": in one of the VirtualDeploymentUnit, the scale_in_out" + " parameter (" + virtualDeploymentUnit.getScale_in_out() + ") must not be less than the number of starting " + "VNFComponent: " + virtualDeploymentUnit.getVnfc().size()); } if (vimInstance.getFlavours() == null) throw new NetworkServiceIntegrityException( "No flavours found on your VIM instance, therefore it is not possible to on board your NSD"); for (DeploymentFlavour deploymentFlavour : vimInstance.getFlavours()) { flavors.add(deploymentFlavour.getFlavour_key()); } for (NFVImage image : vimInstance.getImages()) { imageNames.add(image.getName()); imageIds.add(image.getExtId()); } //All "names" must be contained in the "flavors" if (!flavors.containsAll(names)) { throw new NetworkServiceIntegrityException( "Regarding the VirtualNetworkFunctionDescriptor " + virtualNetworkFunctionDescriptor.getName() + ": in one of the VirtualDeploymentUnit, not all " + "DeploymentFlavour" + names + " are contained into the flavors of the vimInstance " + "chosen. Please choose one from: " + flavors); } if (virtualDeploymentUnit.getVm_image() != null) { for (String image : virtualDeploymentUnit.getVm_image()) { log.debug("Checking image: " + image); if (!imageNames.contains(image) && !imageIds.contains(image)) { throw new NetworkServiceIntegrityException( "Regarding the VirtualNetworkFunctionDescriptor " + virtualNetworkFunctionDescriptor.getName() + ": in one of the VirtualDeploymentUnit, image" + image + " is not contained into the images of the vimInstance " + "chosen. Please choose one from: " + imageNames + " or from " + imageIds); } } } flavors.clear(); // for (VNFComponent vnfComponent : virtualDeploymentUnit.getVnfc()) { // for (VNFDConnectionPoint connectionPoint : vnfComponent.getConnection_point()) { // if (!internalVirtualLink.contains( // connectionPoint.getVirtual_link_reference())) { // throw new NetworkServiceIntegrityException( // "Regarding the VirtualNetworkFunctionDescriptor " // + virtualNetworkFunctionDescriptor.getName() // + ": in one of the VirtualDeploymentUnit, the " // + "virtualLinkReference " // + connectionPoint.getVirtual_link_reference() // + " of a VNFComponent is not contained in the " // + "InternalVirtualLink " // + internalVirtualLink); // } // } // } } } else { log.warn( "Impossible to complete Integrity check because of missing VimInstances definition"); } } else { log.error("" + inAllVims + " not yet implemented!"); throw new UnsupportedOperationException("" + inAllVims + " not yet implemented!"); } } } else { virtualNetworkFunctionDescriptor.setVdu(new HashSet<VirtualDeploymentUnit>()); } // if (!virtualLinkDescriptors.containsAll(internalVirtualLink)) { // throw new NetworkServiceIntegrityException( // "Regarding the VirtualNetworkFunctionDescriptor " // + virtualNetworkFunctionDescriptor.getName() // + ": the InternalVirtualLinks " // + internalVirtualLink // + " are not contained in the VirtualLinkDescriptors " // + virtualLinkDescriptors); // } }
From source file:org.simmi.GeneSetHead.java
License:asdf
private void showGeneTable( /*final Map<String, Gene> genemap, final List<Gene> genelist, final List<Function> funclist, final List<Set<String>> iclusterlist, final List<Set<String>> uclusterlist, final Map<Set<String>, ShareNum> specset,*/ final Map<Set<String>, ClusterInfo> clustInfoMap, final Button jb, final TableView<Gene> genetable, final TableView<Function> upper, final TableView<GeneGroup> lower, final ToolBar toolbar, final ToolBar btoolbar, final Container comp, final JApplet applet, final ComboBox<String> selcomblocal) throws IOException { //JSplitPane splitpane = new JSplitPane(); //splitpane.setOrientation(JSplitPane.VERTICAL_SPLIT); //splitpane.setDividerLocation(400); //JScrollPane scrollpane = new JScrollPane(); /*table = new JTable() { public String getToolTipText(MouseEvent me) { Point p = me.getPoint();// w w w. j av a 2 s . c o m int r = rowAtPoint(p); int c = columnAtPoint(p); if (r >= 0 && r < super.getRowCount()) { Object ret = super.getValueAt(r, c); if (ret != null) { return ret.toString(); // super.getToolTipText( me ); } } return ""; } };*/ //table.setDragEnabled(true); try { final DataFlavor df = new DataFlavor("text/plain;charset=utf-8"); // System.err.println( df.getHumanPresentableName() + " " + // df.getPrimaryType() + " " + df.getSubType() + " " + // df.getMimeType() ); // DataFlavor df1 = DataFlavor.getTextPlainUnicodeFlavor(); // System.err.println( df.getHumanPresentableName() + " " + // df.getPrimaryType() + " " + df.getSubType() + " " + // df.getMimeType() ); TransferHandler th = new TransferHandler() { /** * */ private static final long serialVersionUID = 1L; public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } public boolean canImport(TransferHandler.TransferSupport support) { return true; } protected Transferable createTransferable(JComponent c) { return new Transferable() { @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { Map<String, List<Tegeval>> contigs = new HashMap<>(); StringBuilder ret = new StringBuilder(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; if (!contigs.containsKey(tv.getContshort())) { List<Tegeval> ltv = new ArrayList<>(); ltv.add(tv); contigs.put(tv.getContshort().getName(), ltv); } else { List<Tegeval> ltv = contigs.get(tv.getContshort()); ltv.add(tv); } /* * ret.append( ">" + tv.cont + " " + * tv.teg + " " + tv.eval + "\n" ); * if( tv.dna != null ) { for( int i * = 0; i < tv.dna.length(); i+=70 ) * { ret.append(tv.dna.substring( i, * Math.min(i+70,tv.dna.length()) * )+"\n"); } } */ } for (String cont : contigs.keySet()) { List<Tegeval> tv = contigs.get(cont); String dna = tv.get(0).getSequence(); ret.append(">" + cont + "\n"); // + " " + tv.teg // + " " + // tv.eval + // "\n" ); if (dna != null) { for (int i = 0; i < dna.length(); i += 70) { ret.append(dna.substring(i, Math.min(i + 70, dna.length())) + "\n"); } } } for (String cont : contigs.keySet()) { List<Tegeval> ltv = contigs.get(cont); ret.append(">" + cont + "\n"); // + " " + tv.teg // + " " + // tv.eval + // "\n" ); for (Tegeval tv : ltv) { ret.append("erm\t#0000ff\t" + tv.start + "\t" + tv.stop + "\n"); } } return new ByteArrayInputStream(ret.toString().getBytes()); } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { df }; } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { if (arg0.equals(df)) { return true; } return false; } }; } public boolean importData(TransferHandler.TransferSupport support) { Object obj = null; System.err.println(support.getDataFlavors().length); int b = Arrays.binarySearch(support.getDataFlavors(), DataFlavor.javaFileListFlavor, (o1, o2) -> o1 == o2 ? 1 : 0); try { obj = support.getTransferable().getTransferData(DataFlavor.imageFlavor); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { if (obj != null && obj instanceof File[]) { // File[] ff = (File[])obj; // wbStuff( ff[0].getCanonicalPath() ); } else if (obj instanceof Image) { } else { obj = support.getTransferable().getTransferData(DataFlavor.stringFlavor); System.err.println(obj); URL url = null; try { url = new URL((String) obj); Image image = ImageIO.read(url); } catch (Exception e) { e.printStackTrace(); } } } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return true; } }; //table.setTransferHandler(th); } catch (ClassNotFoundException e2) { e2.printStackTrace(); } final Color darkgreen = new Color(0, 128, 0); final Color darkred = new Color(128, 0, 0); final Color darkblue = new Color(0, 0, 128); final Color darkmag = new Color(128, 0, 128); /*table.setDefaultRenderer(Teg.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component label = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if( value == null ) { label.setBackground(Color.white); } else { cellRender(); } return label; } });*/ //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //table.setAutoCreateRowSorter(true); //scrollpane.setViewportView(table); Set<String> current = null; Set<String> currentko = null; InputStream is = GeneSet.class.getResourceAsStream("/kegg_pathways"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); while (line != null) { if (line.startsWith(">")) { current = new HashSet<>(); currentko = new HashSet<>(); geneset.pathwaymap.put(line.substring(1), current); geneset.pathwaykomap.put(line.substring(1), currentko); } else if (!line.startsWith("K")) { if (current != null) { String str = line.split("[\t ]+")[0]; current.add(str); } } else { if (currentko != null) { String str = line.split("[\t ]+")[0]; currentko.add(str); } } line = br.readLine(); } br.close(); //FileReader fr = new FileReader("/vg454flx/ko2go.txt"); /*is = GeneSet.class.getResourceAsStream("/ko2go.txt"); InputStreamReader isr = new InputStreamReader( is ); br = new BufferedReader( isr ); line = br.readLine(); while (line != null) { String[] split = line.split(" = "); String[] subsplit = split[1].split(" "); Set<String> gos = new HashSet<String>(); for( String go : subsplit ) { gos.add( go ); } ko2go.put( split[0], gos ); line = br.readLine(); } br.close();*/ final TextField textfield = new TextField(); //JComponent topcomp = new JComponent() {}; //topcomp.setLayout(new BorderLayout()); //topcomp.add(scrollpane); textfield.setPrefSize(350, 25); final RadioButton search = new RadioButton("Search"); final RadioButton filter = new RadioButton("Filter"); ToggleGroup bgsf = new ToggleGroup(); search.setToggleGroup(bgsf); filter.setToggleGroup(bgsf); //ButtonGroup bgsf = new ButtonGroup(); //bgsf.add( search ); //bgsf.add( filter ); filter.setSelected(true); //ToolBar topcombo = new ToolBar(); // topcombo. // topcombo.setLayout( new FlowLayout() ); specombo = new ComboBox<>(); combo = new ComboBox<>(); specombo.getItems().add("Select blast species"); combo.getItems().add("Select pathway"); btoolbar.getItems().add(combo); btoolbar.getItems().add(specombo); //topcomp.add(topcombo, BorderLayout.SOUTH); //JComponent ttopcom = new JComponent() {}; //ttopcom.setLayout(new FlowLayout()); /* frame.setVisible( true ); } }; AbstractAction sharenumaction = new AbstractAction("Update share numbers") { @Override public void actionPerformed(ActionEvent e) { Set<String> specs = getSelspec(GeneSetHead.this, specList, null); updateShareNum(specs); } }; AbstractAction importgenesymbolaction = new AbstractAction("Import gene symbols") { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) { try { Map<String,String> env = new HashMap<String,String>(); env.put("create", "true"); Path path = zipfile.toPath(); String uristr = "jar:" + path.toUri(); geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")* ); geneset.zipfilesystem = FileSystems.newFileSystem( geneset.zipuri, env ); Path nf = geneset.zipfilesystem.getPath("/smap_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE); InputStream is = new GZIPInputStream( new FileInputStream( fc.getSelectedFile() ) ); uni2symbol(new InputStreamReader(is), bw, unimap); bw.close(); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); geneset.zipfilesystem.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }; AbstractAction importidmappingaction = new AbstractAction("Id mapping") { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) { try { Map<String,String> env = new HashMap<String,String>(); env.put("create", "true"); Path path = zipfile.toPath(); String uristr = "jar:" + path.toUri(); geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")/ ); geneset.zipfilesystem = FileSystems.newFileSystem( geneset.zipuri, env ); Path nf = geneset.zipfilesystem.getPath("/idmapping_short.dat"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE); InputStream is = new GZIPInputStream( new FileInputStream( fc.getSelectedFile() ) ); if( unimap != null ) unimap.clear(); unimap = idMapping(new InputStreamReader(is), bw, 2, 0, refmap, genmap, gimap); bw.close(); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); geneset.zipfilesystem.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }; final JCheckBoxMenuItem checkbox = new JCheckBoxMenuItem(); checkbox.setAction(new AbstractAction("Sort by location") { @Override public void actionPerformed(ActionEvent e) { Tegeval.locsort = checkbox.isSelected(); } }); AbstractAction saveselAction = new AbstractAction("Save selection") { @Override public void actionPerformed(ActionEvent e) { int[] rr = table.getSelectedRows(); if( rr.length > 0 ) { String val = Integer.toString( table.convertRowIndexToModel(rr[0]) ); for( int i = 1; i < rr.length; i++ ) { val += ","+table.convertRowIndexToModel(rr[i]); } String selname = JOptionPane.showInputDialog("Selection name"); if( comp instanceof Applet ) { try { ((GeneSet)comp).saveSel( selname, val); } catch (Exception e1) { e1.printStackTrace(); } } } } }; JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("Functions"); menu.add( importidmappingaction ); menu.add( functionmappingaction ); menu.add( importgenesymbolaction ); menu.add( fetchaction ); menu.add( blast2action ); menu.add( sharenumaction ); menu.addSeparator(); menu.add( checkbox ); menu.add( saveselAction ); menu.addSeparator(); menu.add( genomestataction ); menu.add( selectsharingaction ); menu.add( shuffletreeaction ); menu.add( presabsaction ); menu.add( freqdistaction ); menu.add( gcpaction ); menu.add( matrixaction ); menu.add( pancoreaction ); menu.add( blastaction ); menu.add( koexportaction ); menu.add( genomesizeaction ); menu.add( gcaction ); menu.add( gcskewaction ); menu.add( mltreemapaction ); menu.add( sevenaction ); menu.add( cogaction ); menu.add( genexyplotaction ); menu.add( compareplotaction ); menu.add( syntenygradientaction ); menu.add( codregaction ); menu.add( fetchcoreaction ); menu.add( loadcontiggraphaction ); menu.add( selectflankingaction ); menu.add( showflankingaction ); menu.add( showcontigsaction ); menu.add( showunresolved ); menu.add( genephyl ); menubar.add( menu ); ttopcom.add( menubar ); JMenu view = new JMenu("View"); menubar.add( view ); gb = new JRadioButtonMenuItem( new AbstractAction("Genes") { @Override public void actionPerformed(ActionEvent e) { table.setModel( defaultModel ); } }); view.add( gb ); ggb = new JRadioButtonMenuItem( new AbstractAction("Gene groups") { @Override public void actionPerformed(ActionEvent e) { table.setModel( groupModel ); } }); ButtonGroup bg = new ButtonGroup(); bg.add( gb ); bg.add( ggb ); ggb.setSelected( true ); view.add( ggb );*/ //ttopcom.add( shuffletreebutton ); //ttopcom.add( presabsbutton ); //ttopcom.add(freqdistbutton); //ttopcom.add(matrixbutton); toolbar.getItems().add(textfield); toolbar.getItems().add(search); toolbar.getItems().add(filter); toolbar.getItems().add(label); selcomblocal.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { String key = newValue; if (((GeneSetHead) comp).selectionMap.containsKey(key)) { Set<Integer> val = ((GeneSetHead) comp).selectionMap.get(key); if (val != null) { table.getSelectionModel().clearSelection(); for (int i : val) { //int r = table.convertRowIndexToView(i); table.getSelectionModel().select(i); } } else { System.err.println("null " + key); } } else { System.err.println("no " + key); } }); toolbar.getItems().add(selcomblocal); /*syncolorcomb.addItemListener( new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { String spec = (String)syncolorcomb.getSelectedItem(); //if( spec.length() > 0 ) } });*/ toolbar.getItems().add(searchcolcomb); toolbar.getItems().add(syncolorcomb); //topcomp.add(ttopcom, BorderLayout.NORTH); table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); table.getSelectionModel().selectedItemProperty().addListener(e -> { label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size()); }); gtable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); gtable.getSelectionModel().selectedItemProperty().addListener(e -> { label.setText(gtable.getItems().size() + "/" + gtable.getSelectionModel().getSelectedItems().size()); }); /*JButton but = new JButton(new AbstractAction("Gene sorter") { @Override public void actionPerformed(ActionEvent e) { try { GeneSorter.mynd(genelist, table, "t.scotoductusSA01", contigs); } catch (IOException e1) { e1.printStackTrace(); } } });*/ final TextField ftextfield = new TextField(); btoolbar.getItems().add(ftextfield); ComboBox<String> scombo = new ComboBox(); scombo.getItems().add("5S/8S"); scombo.getItems().add("16S/18S"); scombo.getItems().add("23S/28S"); scombo.getSelectionModel().selectedItemProperty().addListener(e -> { String name = e.toString().split("/")[0]; InputStream iss = GeneSet.class.getResourceAsStream("/all" + name + ".fsa"); InputStreamReader isr = new InputStreamReader(iss); BufferedReader brr = new BufferedReader(isr); JTextArea textarea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(textarea); try { String ln = brr.readLine(); while (ln != null) { textarea.append(ln + "\n"); ln = brr.readLine(); } } catch (IOException e1) { e1.printStackTrace(); } JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true); }); btoolbar.getItems().add(scombo); Button swsearch = new Button("SW Search"); swsearch.setOnAction(e -> { JComponent c = new JComponent() { }; final JProgressBar pb = new JProgressBar(); final JTextArea textarea = new JTextArea(); JButton searchbut = new JButton(new AbstractAction("Blast") { @Override public void actionPerformed(ActionEvent e) { final String fasta = textarea.getText(); final SmithWater sw = new SmithWater(); final InputStream is = GeneSet.class.getResourceAsStream("/allthermus.aa"); new Thread() { public void run() { try { sw.fasta_align(new StringReader(fasta), new InputStreamReader(is), pb); List<SmithWater.ALN> alns = sw.getAlignments(); SmithWater.ALN first = null; int count = 0; String result = ""; Set<String> regnames = new HashSet<String>(); for (SmithWater.ALN aln : alns) { if (first == null) { first = aln; } else if (aln.getScore() < 3.0f * (first.getScore() / 4.0f)) break; result += aln.toString(); regnames.add(aln.getShortDestName()); if (++count == 10) break; } textarea.setText(result); for (Gene g : geneset.genelist) { boolean found = false; Tegeval tv = g.tegeval; if (regnames.contains(tv.name)) { found = true; break; } if (found) { gtable.getSelectionModel().select(g); break; } } } catch (IOException e) { e.printStackTrace(); } } }.start(); } }); c.setLayout(new BorderLayout()); JScrollPane scrollpane = new JScrollPane(textarea); c.add(scrollpane); c.add(pb, BorderLayout.NORTH); c.add(searchbut, BorderLayout.SOUTH); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(c); frame.setSize(400, 300); frame.setVisible(true); }); btoolbar.getItems().add(swsearch); btoolbar.getItems().add(jb); TableColumn<GeneGroup, String> namedesccol = new TableColumn("Desc"); namedesccol.setCellValueFactory(new PropertyValueFactory<>("name")); table.getColumns().add(namedesccol); TableColumn<GeneGroup, String> origincol = new TableColumn("Origin"); origincol.setCellValueFactory(new PropertyValueFactory<>("origin")); table.getColumns().add(origincol); TableColumn<GeneGroup, String> geneidcol = new TableColumn("Genid"); geneidcol.setCellValueFactory(new PropertyValueFactory<>("genid")); table.getColumns().add(geneidcol); TableColumn<GeneGroup, String> refidcol = new TableColumn("Refid"); refidcol.setCellValueFactory(new PropertyValueFactory<>("refid")); table.getColumns().add(refidcol); TableColumn<GeneGroup, String> unidcol = new TableColumn("Unid"); unidcol.setCellValueFactory(new PropertyValueFactory<>("unid")); table.getColumns().add(unidcol); TableColumn<GeneGroup, String> keggidcol = new TableColumn("Keggid"); keggidcol.setCellValueFactory(new PropertyValueFactory<>("keggid")); table.getColumns().add(keggidcol); TableColumn<GeneGroup, String> keggpathcol = new TableColumn("Kegg pathway"); keggpathcol.setCellValueFactory(new PropertyValueFactory<>("keggPathway")); table.getColumns().add(keggpathcol); TableColumn<GeneGroup, String> kocol = new TableColumn("KO"); kocol.setCellValueFactory(new PropertyValueFactory<>("ko")); table.getColumns().add(kocol); TableColumn<GeneGroup, String> ksymbcol = new TableColumn("Ksymbol"); ksymbcol.setCellValueFactory(new PropertyValueFactory<>("ksymbol")); table.getColumns().add(ksymbcol); TableColumn<GeneGroup, String> symbcol = new TableColumn("Symbol"); symbcol.setCellValueFactory(new PropertyValueFactory<>("symbol")); table.getColumns().add(symbcol); TableColumn<GeneGroup, String> konamecol = new TableColumn("KO name"); konamecol.setCellValueFactory(new PropertyValueFactory<>("koname")); table.getColumns().add(konamecol); TableColumn<GeneGroup, String> pbidcol = new TableColumn("Pbid"); pbidcol.setCellValueFactory(new PropertyValueFactory<>("pbid")); table.getColumns().add(pbidcol); TableColumn<GeneGroup, String> eccol = new TableColumn("Ec"); eccol.setCellValueFactory(new PropertyValueFactory<>("ec")); table.getColumns().add(eccol); TableColumn<GeneGroup, String> cognamecol = new TableColumn("Cog name"); cognamecol.setCellValueFactory(new PropertyValueFactory<>("cogname")); table.getColumns().add(cognamecol); TableColumn<GeneGroup, String> cogcol = new TableColumn("Cog"); cogcol.setCellValueFactory(new PropertyValueFactory<>("cog")); table.getColumns().add(cogcol); TableColumn<GeneGroup, String> cogannocol = new TableColumn("Cog annotation"); cogannocol.setCellValueFactory(new PropertyValueFactory<>("coganno")); table.getColumns().add(cogannocol); TableColumn<GeneGroup, String> cogsymbcol = new TableColumn("Cog symbol"); cogsymbcol.setCellValueFactory(new PropertyValueFactory<>("cogsymbol")); table.getColumns().add(cogsymbcol); TableColumn<GeneGroup, String> cazycol = new TableColumn("Cazy"); cazycol.setCellValueFactory(new PropertyValueFactory<>("cazy")); table.getColumns().add(cazycol); TableColumn<GeneGroup, String> prescol = new TableColumn("Present in"); prescol.setCellValueFactory(new PropertyValueFactory<>("presentin")); table.getColumns().add(prescol); TableColumn<GeneGroup, Integer> groupindcol = new TableColumn("Group index"); groupindcol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupIndex")); table.getColumns().add(groupindcol); TableColumn<GeneGroup, Integer> groupcovcol = new TableColumn("Group coverage"); groupcovcol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupCoverage")); table.getColumns().add(groupcovcol); TableColumn<GeneGroup, Integer> groupsizecol = new TableColumn("Group size"); groupsizecol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupGeneCount")); table.getColumns().add(groupsizecol); TableColumn<GeneGroup, String> locprefcol = new TableColumn("Loc pref"); locprefcol.setCellValueFactory(new PropertyValueFactory<>("locpref")); table.getColumns().add(locprefcol); TableColumn<GeneGroup, String> avgcpcol = new TableColumn("Avg GC%"); avgcpcol.setCellValueFactory(new PropertyValueFactory<>("avggcp")); table.getColumns().add(avgcpcol); TableColumn<GeneGroup, String> numloccol = new TableColumn("#Loc"); numloccol.setCellValueFactory(new PropertyValueFactory<>("numloc")); table.getColumns().add(numloccol); TableColumn<GeneGroup, String> numlocgroupcol = new TableColumn("#Loc group"); numlocgroupcol.setCellValueFactory(new PropertyValueFactory<>("numlocgroup")); table.getColumns().add(numlocgroupcol); TableColumn<GeneGroup, ShareNum> sharenumcol = new TableColumn("Sharing number"); sharenumcol.setCellValueFactory(new PropertyValueFactory<>("sharingNumber")); table.getColumns().add(sharenumcol); TableColumn<GeneGroup, String> maxcyccol = new TableColumn("Max cyc"); maxcyccol.setCellValueFactory(new PropertyValueFactory<>("maxCyc")); table.getColumns().add(maxcyccol); TableColumn<Gene, String> gnamedesccol = new TableColumn("Desc"); gnamedesccol.setCellValueFactory(new PropertyValueFactory<>("name")); gtable.getColumns().add(gnamedesccol); TableColumn<Gene, String> gorigincol = new TableColumn("Origin"); gorigincol.setCellValueFactory(new PropertyValueFactory<>("origin")); gtable.getColumns().add(gorigincol); TableColumn<Gene, String> ggeneidcol = new TableColumn("Genid"); ggeneidcol.setCellValueFactory(new PropertyValueFactory<>("genid")); gtable.getColumns().add(ggeneidcol); TableColumn<Gene, String> grefidcol = new TableColumn("Refid"); grefidcol.setCellValueFactory(new PropertyValueFactory<>("refid")); gtable.getColumns().add(grefidcol); TableColumn<Gene, String> gunidcol = new TableColumn("Unid"); gunidcol.setCellValueFactory(new PropertyValueFactory<>("unid")); gtable.getColumns().add(gunidcol); TableColumn<Gene, String> gkeggidcol = new TableColumn("Keggid"); gkeggidcol.setCellValueFactory(new PropertyValueFactory<>("keggid")); gtable.getColumns().add(gkeggidcol); TableColumn<Gene, String> gkeggpathcol = new TableColumn("Kegg pathway"); gkeggpathcol.setCellValueFactory(new PropertyValueFactory<>("keggPathway")); gtable.getColumns().add(gkeggpathcol); TableColumn<Gene, String> gkocol = new TableColumn("KO"); gkocol.setCellValueFactory(new PropertyValueFactory<>("ko")); gtable.getColumns().add(gkocol); TableColumn<Gene, String> gksymbcol = new TableColumn("Ksymbol"); gksymbcol.setCellValueFactory(new PropertyValueFactory<>("ksymbol")); gtable.getColumns().add(gksymbcol); TableColumn<Gene, String> gsymbcol = new TableColumn("Symbol"); gsymbcol.setCellValueFactory(new PropertyValueFactory<>("symbol")); gtable.getColumns().add(gsymbcol); TableColumn<Gene, String> gkonamecol = new TableColumn("KO name"); gkonamecol.setCellValueFactory(new PropertyValueFactory<>("koname")); gtable.getColumns().add(gkonamecol); TableColumn<Gene, String> gpbidcol = new TableColumn("Pbid"); gpbidcol.setCellValueFactory(new PropertyValueFactory<>("pbid")); gtable.getColumns().add(gpbidcol); TableColumn<Gene, String> geccol = new TableColumn("Ec"); geccol.setCellValueFactory(new PropertyValueFactory<>("ec")); gtable.getColumns().add(geccol); TableColumn<Gene, String> gcognamecol = new TableColumn("Cog name"); gcognamecol.setCellValueFactory(new PropertyValueFactory<>("cogname")); gtable.getColumns().add(gcognamecol); TableColumn<Gene, String> gcogcol = new TableColumn("Cog"); gcogcol.setCellValueFactory(new PropertyValueFactory<>("cog")); gtable.getColumns().add(gcogcol); TableColumn<Gene, String> gcogannocol = new TableColumn("Cog annotation"); gcogannocol.setCellValueFactory(new PropertyValueFactory<>("coganno")); gtable.getColumns().add(gcogannocol); TableColumn<Gene, String> gcogsymbcol = new TableColumn("Cog symbol"); gcogsymbcol.setCellValueFactory(new PropertyValueFactory<>("cogsymbol")); gtable.getColumns().add(gcogsymbcol); TableColumn<Gene, String> gcazycol = new TableColumn("Cazy"); gcazycol.setCellValueFactory(new PropertyValueFactory<>("cazy")); gtable.getColumns().add(gcazycol); TableColumn<Gene, String> gprescol = new TableColumn("Present in"); gprescol.setCellValueFactory(new PropertyValueFactory<>("presentin")); gtable.getColumns().add(gprescol); TableColumn<Gene, Integer> ggroupindcol = new TableColumn("Group index"); ggroupindcol.setCellValueFactory(new PropertyValueFactory<>("groupIndex")); gtable.getColumns().add(ggroupindcol); TableColumn<Gene, Integer> ggroupcovcol = new TableColumn("Group coverage"); ggroupcovcol.setCellValueFactory(new PropertyValueFactory<>("groupCoverage")); gtable.getColumns().add(ggroupcovcol); TableColumn<Gene, Integer> ggroupsizecol = new TableColumn("Group size"); ggroupsizecol.setCellValueFactory(new PropertyValueFactory<>("groupGeneCount")); gtable.getColumns().add(ggroupsizecol); TableColumn<Gene, String> glocprefcol = new TableColumn("Loc pref"); glocprefcol.setCellValueFactory(new PropertyValueFactory<>("locpref")); gtable.getColumns().add(glocprefcol); TableColumn<Gene, String> gavgcpcol = new TableColumn("Avg GC%"); gavgcpcol.setCellValueFactory(new PropertyValueFactory<>("avggcp")); gtable.getColumns().add(gavgcpcol); TableColumn<Gene, String> gnumloccol = new TableColumn("#Loc"); gnumloccol.setCellValueFactory(new PropertyValueFactory<>("numloc")); gtable.getColumns().add(gnumloccol); TableColumn<Gene, String> gnumlocgroupcol = new TableColumn("#Loc group"); gnumlocgroupcol.setCellValueFactory(new PropertyValueFactory<>("numlocgroup")); gtable.getColumns().add(gnumlocgroupcol); TableColumn<Gene, ShareNum> gsharenumcol = new TableColumn("Sharing number"); gsharenumcol.setCellValueFactory(new PropertyValueFactory<>("sharingNumber")); gtable.getColumns().add(gsharenumcol); TableColumn<Gene, String> gmaxcyccol = new TableColumn("Max cyc"); gmaxcyccol.setCellValueFactory(new PropertyValueFactory<>("maxCyc")); gtable.getColumns().add(gmaxcyccol); /*if( upper != null ) { SwingUtilities.invokeLater( new Runnable() { public void run() { //upper.setContent( botcomp ); lower.setContent( topcomp ); } }); } else { splitpane.setBottomComponent(botcomp); splitpane.setTopComponent(topcomp); } groupModel = new TableModel() { @Override public int getRowCount() { return geneset.allgenegroups == null ? 0 : geneset.allgenegroups.size(); } @Override public int getColumnCount() { return 32+geneset.specList.size(); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "Desc"; } else if (columnIndex == 1) { return "Origin"; } else if (columnIndex == 2) { return "Genid"; } else if (columnIndex == 3) { return "Refid"; } else if (columnIndex == 4) { return "Unid"; } else if (columnIndex == 5) { return "Keggid"; } else if (columnIndex == 6) { return "Kegg pathway"; } else if (columnIndex == 7) { return "KO"; } else if (columnIndex == 8) { return "KSymbol"; } else if (columnIndex == 9) { return "Symbol"; } else if (columnIndex == 10) { return "KO name"; } else if (columnIndex == 11) { return "Pdbid"; } else if (columnIndex == 12) { return "EC"; } else if (columnIndex == 13) { return "Cog name"; } else if (columnIndex == 14) { return "Cog"; } else if (columnIndex == 15) { return "Cog annotation"; } else if (columnIndex == 16) { return "Cog symbol"; } else if (columnIndex == 17) { return "Cazy"; } else if (columnIndex == 18) { return "Present in"; } else if (columnIndex == 19) { return "Group index"; } else if (columnIndex == 20) { return "Group coverage"; } else if (columnIndex == 21) { return "Group size"; } else if (columnIndex == 22) { return "Locprev"; } else if (columnIndex == 23) { return "Avg GC%"; } else if (columnIndex == 24) { return "# of locus"; } else if (columnIndex == 25) { return "# of loc in group"; } else if (columnIndex == 26) { return "max length"; } else if (columnIndex == 27) { return "sharing number"; } else if (columnIndex == 28) { return "# Cyc"; } else if (columnIndex == 29) { return "16S Corr"; } else if (columnIndex == 30) { return "SingalP"; } else if (columnIndex == 31) { return "TransM"; } else { String spec = geneset.specList.get( columnIndex - 32 ); if( spec != null ) { if( spec.toLowerCase().contains("thermus") ) { int i = spec.indexOf('_'); return spec.substring(i+1, spec.length()); } else return spec; } return ""; } /* else if (columnIndex == 19) { return "T.tSG0"; } else if (columnIndex == 20) { return "T.tJL18"; } else if (columnIndex == 21) { return "T.tHB8"; } else if (columnIndex == 22) { return "T.tHB27"; } else if (columnIndex == 23) { return "T.scotoSA01"; } else if (columnIndex == 24) { return "T.aqua"; } else if (columnIndex == 25) { return "T.eggert"; } else if (columnIndex == 26) { return "T.island"; } else if (columnIndex == 27) { return "T.antan"; } else if (columnIndex == 28) { return "T.scoto346"; } else if (columnIndex == 29) { return "T.scoto1572"; } else if (columnIndex == 30) { return "T.scoto252"; } else if (columnIndex == 31) { return "T.scoto2101"; } else if (columnIndex == 32) { return "T.scoto2127"; } else if (columnIndex == 33) { return "T.scoto4063"; } else if (columnIndex == 34) { return "T.oshimai"; } else if (columnIndex == 35) { return "T.brockianus"; } else if (columnIndex == 36) { return "T.filiformis"; } else if (columnIndex == 37) { return "T.igniterrae"; } else if (columnIndex == 38) { return "T.kawarayensis"; } else if (columnIndex == 39) { return "T.arciformis"; } else if (columnIndex == 40) { return "T.spCCB"; } else if (columnIndex == 41) { return "T.spRLM"; } else if (columnIndex == 42) { return "T.oshimaiJL2"; } else if (columnIndex == 43) { return "MT.silvianus"; } else if (columnIndex == 44) { return "MT.ruber"; } else if (columnIndex == 45) { return "M.hydro"; } else if (columnIndex == 46) { return "O.profu"; }* //return ""; } @Override public Class<?> getColumnClass(int columnIndex) { if( columnIndex == 19 || columnIndex == 20 || columnIndex == 28 ) return Double.class; else if(columnIndex == 10 || (columnIndex >= 17 && columnIndex <= 28) ) return Integer.class; else if (columnIndex >= 32) return Teg.class; return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { GeneGroup gg = geneset.allgenegroups.get(rowIndex); if (columnIndex == 0) { return gg.getCommonName(); } else if (columnIndex == 1) { return gg.getCommonOrigin(); } else if (columnIndex == 2) { return null;//gene.genid; } else if (columnIndex == 3) { return gg.getCommonRefId(); } else if (columnIndex == 4) { return gg.getCommonUnId(); } else if (columnIndex == 5) { return gg.getKeggid(); } else if (columnIndex == 6) { return gg.getKeggPathway(); } else if (columnIndex == 7) { return gg.getCommonKO(); } else if (columnIndex == 8) { return gg.getCommonKSymbol(); } else if (columnIndex == 9) { return gg.getCommonSymbol(); //ko2name != null ? ko2name.get( gg.getCommonKO() ) : null; } else if (columnIndex == 10) { String ret = geneset.ko2name != null ? geneset.ko2name.get( gg.getCommonKO() ) : null; if( ret == null ) { String symbol = gg.getCommonSymbol(); if( symbol != null ) { if( symbol.length() <= 5 ) ret = symbol; } } return ret; } else if (columnIndex == 11) { return null;//gene.pdbid; } else if (columnIndex == 12) { return gg.getCommonEc(); } else if (columnIndex == 13) { Cog cog = gg.getCommonCog( geneset.cogmap ); if( cog != null ) { if( cog.name == null ) cog.name = geneset.cogidmap.get( cog.id ); return cog.name; } return null; } else if (columnIndex == 14) { Cog cog = gg.getCommonCog( geneset.cogmap ); return cog != null ? cog.id : null; } else if (columnIndex == 15) { Cog cog = gg.getCommonCog( geneset.cogmap ); return cog != null ? cog.annotation : null; } else if (columnIndex == 16) { Cog cog = gg.getCommonCog( geneset.cogmap ); return cog != null ? cog.genesymbol : null; } else if (columnIndex == 17) { return gg.getCommonCazy( geneset.cazymap ); } else if (columnIndex == 18) { return gg.getSpecies().size(); } else if (columnIndex == 19) { return gg.groupIndex; } else if (columnIndex == 20) { return gg.getGroupCoverage(); } else if (columnIndex == 21) { return gg.getGroupGeneCount(); } else if (columnIndex == 22) { return null;//gene.proximityGroupPreservation; } else if (columnIndex == 23) { return gg.getAvgGCPerc(); } else if (columnIndex == 24) { return gg.genes.size(); } else if (columnIndex == 25) { return gg.getGroupCount(); } else if (columnIndex == 26) { return gg.getMaxLength(); } else if (columnIndex == 27) { return geneset.specset.get( gg.getSpecies() ); } else if (columnIndex == 28) { return gg.getMaxCyc(); } else if (columnIndex == 29) { return gg.getGroupCoverage() == 39 && gg.getGroupCount() == 39 ? 0 : -1; } else if (columnIndex == 30) { return gg.getCommonSignalP(); } else if (columnIndex == 31) { return gg.getCommonTransM(); } else { String spec = geneset.specList.get( columnIndex - 32 ); Teginfo ret = geneset.getGroupTes( gg, spec ); return ret; //return null; } //return columnIndex >= 11 ? null : ""; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) {} @Override public void addTableModelListener(TableModelListener l) {} @Override public void removeTableModelListener(TableModelListener l) {} }; defaultModel = new TableModel() { @Override public int getRowCount() { int gs = geneset.genelist.size(); return gs; } @Override public int getColumnCount() { return 26+geneset.specList.size(); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "Desc"; } else if (columnIndex == 1) { return "Origin"; } else if (columnIndex == 2) { return "Genid"; } else if (columnIndex == 3) { return "Refid"; } else if (columnIndex == 4) { return "Unid"; } else if (columnIndex == 5) { return "Keggid"; } else if (columnIndex == 6) { return "KOid"; } else if (columnIndex == 7) { return "KSymbol"; } else if (columnIndex == 8) { return "Symbol"; } else if (columnIndex == 9) { return "KOname"; } else if (columnIndex == 10) { return "Pdbid"; } else if (columnIndex == 11) { return "ecid"; } else if (columnIndex == 12) { return "COG"; } else if (columnIndex == 13) { return "COG name"; } else if (columnIndex == 14) { return "Present in"; } else if (columnIndex == 15) { return "Group index"; } else if (columnIndex == 16) { return "Group coverage"; } else if (columnIndex == 17) { return "Group size"; } else if (columnIndex == 18) { return "Locprev"; } else if (columnIndex == 19) { return "Avg GC%"; } else if (columnIndex == 20) { return "# of locus"; } else if (columnIndex == 21) { return "# of loc in group"; } else if (columnIndex == 22) { return "max length"; } else if (columnIndex == 23) { return "sharing number"; } else if (columnIndex == 24) { return "# Cyc"; } else if (columnIndex == 25) { return "16S Corr"; } else { return geneset.specList.get( columnIndex - 26 ); } /*else if (columnIndex == 19) { return "T.tSG0"; } else if (columnIndex == 20) { return "T.tJL18"; } else if (columnIndex == 21) { return "T.tHB8"; } else if (columnIndex == 22) { return "T.tHB27"; } else if (columnIndex == 23) { return "T.scotoSA01"; } else if (columnIndex == 24) { return "T.aqua"; } else if (columnIndex == 25) { return "T.eggert"; } else if (columnIndex == 26) { return "T.island"; } else if (columnIndex == 27) { return "T.antan"; } else if (columnIndex == 28) { return "T.scoto346"; } else if (columnIndex == 29) { return "T.scoto1572"; } else if (columnIndex == 30) { return "T.scoto252"; } else if (columnIndex == 31) { return "T.scoto2101"; } else if (columnIndex == 32) { return "T.scoto2127"; } else if (columnIndex == 33) { return "T.scoto4063"; } else if (columnIndex == 34) { return "T.oshimai"; } else if (columnIndex == 35) { return "T.brockianus"; } else if (columnIndex == 36) { return "T.filiformis"; } else if (columnIndex == 37) { return "T.igniterrae"; } else if (columnIndex == 38) { return "T.kawarayensis"; } else if (columnIndex == 39) { return "T.arciformis"; } else if (columnIndex == 40) { return "T.spCCB"; } else if (columnIndex == 41) { return "T.spRLM"; } else if (columnIndex == 42) { return "T.oshimaiJL2"; } else if (columnIndex == 43) { return "MT.silvianus"; } else if (columnIndex == 44) { return "MT.ruber"; } else if (columnIndex == 45) { return "M.hydro"; } else if (columnIndex == 46) { return "O.profu"; }* } @Override public Class<?> getColumnClass(int columnIndex) { if( columnIndex == 16 || columnIndex == 19 || columnIndex == 25 ) return Double.class; else if(columnIndex >= 13 && columnIndex <= 24) return Integer.class; else if (columnIndex >= 26) return Teg.class; return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Gene gene = geneset.genelist.get(rowIndex); if (columnIndex == 0) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gene.getGeneGroup().getCommonName() : null; } else if (columnIndex == 1) { return gene.getSpecies(); } else if (columnIndex == 2) { return gene.genid; } else if (columnIndex == 3) { return gene.refid; } else if (columnIndex == 4) { return gene.uniid; } else if (columnIndex == 5) { return gene.keggid; } else if (columnIndex == 6) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonKO() : null; } else if (columnIndex == 7) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonKSymbol() : null; } else if (columnIndex == 8) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonSymbol() : null; //gene.symbol } else if (columnIndex == 9) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonKOName( geneset.ko2name ) : null; } else if (columnIndex == 10) { return gene.pdbid; } else if (columnIndex == 11) { return gene.ecid; } else if (columnIndex == 12) { Cog cog = gene.getGeneGroup() != null ? gene.getGeneGroup().getCommonCog( geneset.cogmap ) : null; if( cog != null ) return cog.id; return null; } else if (columnIndex == 13) { Cog cog = gene.getGeneGroup() != null ? gene.getGeneGroup().getCommonCog( geneset.cogmap ) : null; if( cog != null ) return cog.name; return null; } else if (columnIndex == 14) { return gene.getGeneGroup().getSpecies().size(); } else if (columnIndex == 15) { return gene.getGroupIndex(); } else if (columnIndex == 16) { return gene.getGroupCoverage(); } else if (columnIndex == 17) { return gene.getGroupGenCount(); } else if (columnIndex == 18) { return gene.proximityGroupPreservation; } else if (columnIndex == 19) { return gene.getGCPerc(); } else if (columnIndex == 20) { /*int val = 0; for (String str : gene.species.keySet()) { val += gene.species.get(str).tset.size(); }* return 1; } else if (columnIndex == 21) { return gene.getGroupCount(); } else if (columnIndex == 22) { return gene.getMaxLength(); } else if (columnIndex == 23) { GeneGroup gg = gene.getGeneGroup(); if( gg != null && gg.getSpecies() != null ) { return geneset.specset.get( gg.getSpecies() ); } return null; } else if (columnIndex == 24) { gene.getMaxCyc(); } else if (columnIndex == 25) { return gene.getGroupCoverage() == 35 && gene.getGroupCount() == 35 ? gene.corr16s : -1; } else { /*String spec = specList.get( columnIndex-26 ); /*if( spec.contains("timidus") ) { System.err.println(); }* //Teginfo set = gene.species.equals(spec) ? gene.teginfo : null; if( gene.getSpecies().equals( spec ) ) { return gene.tegeval; } else { return gene.getGeneGroup().species.get( spec ); }* return null; } return columnIndex >= 17 ? null : ""; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) {} @Override public void addTableModelListener(TableModelListener l) {} @Override public void removeTableModelListener(TableModelListener l) {} }; table.setModel( groupModel );*/ //table.setModel( defaultModel ); /* * Comparator<Tegeval> wrapMe = new Comparator<Tegeval>() { public int * compare(Tegeval o1, Tegeval o2) { return o1.compareTo(o2); } }; * DefaultRowSorter<TableModel, Integer> rowsorter = * (DefaultRowSorter<TableModel,Integer>)table.getRowSorter(); for( int * i = 10; i < 23; i++ ) { rowsorter.setComparator(i, * NullComparators.atEnd(wrapMe)); } */ /*table.getRowSorter().addRowSorterListener( new RowSorterListener() { @Override public void sorterChanged(RowSorterEvent e) { for (String cstr : geneset.contigmap.keySet()) { Sequence c = geneset.contigmap.get(cstr); //c.count = 0; c.loc = 0.0; } if( table.getModel() == defaultModel ) { for (Gene g : geneset.genelist) { Tegeval tv = g.tegeval; // int first = tv.cont.indexOf('_'); // int sec = tv.cont.indexOf('_',first+1); Sequence cont = tv.getContshort(); // tv.cont.substring(0,sec); if( cont != null && geneset.contigmap.containsKey(cont.getName()) ) { Sequence c = geneset.contigmap.get(cont.getName()); //c.count++; int val = table.convertRowIndexToView(g.index); c.loc += (double) val; } } } for( JSplitPane gsplitpane : splitpaneList ) { gsplitpane.repaint(); } } });*/ ftable = upper; ftable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); /*ftable = new JTable() { public String getToolTipText(MouseEvent me) { Point p = me.getPoint(); int r = rowAtPoint(p); int c = columnAtPoint(p); if (r >= 0 && r < super.getRowCount()) { Object ret = super.getValueAt(r, c); if (ret != null) { return ret.toString(); // super.getToolTipText( me ); } } return ""; } };*/ ContextMenu fpopup = new ContextMenu(); MenuItem amigo = new MenuItem("Amigo lookup"); amigo.setOnAction(e -> { String go = ftable.getSelectionModel().getSelectedItem().getGo(); try { // GeneSetHead.this.getAppletContext(). Desktop.getDesktop() .browse(new URI("http://amigo.geneontology.org/cgi-bin/amigo/term_details?term=" + go)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(amigo); MenuItem keggl = new MenuItem("KEGG lookup"); keggl.setOnAction(e -> { String kegg = ftable.getSelectionModel().getSelectedItem().getKegg(); try { Desktop.getDesktop().browse(new URI("http://www.genome.jp/dbget-bin/www_bget?rn:" + kegg)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(keggl); MenuItem ecl = new MenuItem("EC lookup"); ecl.setOnAction(e -> { String ec = ftable.getSelectionModel().getSelectedItem().getEc(); try { Desktop.getDesktop().browse(new URI("http://enzyme.expasy.org/EC/" + ec)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(ecl); fpopup.getItems().add(new SeparatorMenuItem()); MenuItem excelreport = new MenuItem("Excel report"); excelreport.setOnAction(e -> { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("enzyme"); int k = 0; for (Function f : ftable.getSelectionModel().getSelectedItems()) { //String ec = (String)ftable.getValueAt(r, 1); //String go = (String)ftable.getValueAt(r, 0); //int i = ftable.getSelectionModel().convertRowIndexToModel(r); //Function f = geneset.funclist.get(i); for (GeneGroup gg : f.getGeneGroups()) { for (String spec : gg.getSpecies()) { Teginfo ti = gg.getGenes(spec); Row row = sheet.createRow(k++); Cell ecell = row.createCell(0); ecell.setCellValue("EC:" + f.getEc()); Cell ncell = row.createCell(1); ncell.setCellValue(f.getName()); Cell spell = row.createCell(2); spell.setCellValue(spec); Cell seqcell = row.createCell(3); seqcell.setCellValue(ti.tset.size()); } /*for( Gene g :gg.genes ) { Row row = sheet.createRow(k++); Cell ecell = row.createCell(0); ecell.setCellValue( "EC:"+f.ec ); Cell ncell = row.createCell(1); ncell.setCellValue( f.name ); Cell spell = row.createCell(2); spell.setCellValue( g.getSpecies() ); Cell seqcell = row.createCell(3); seqcell.setCellValue( g.tegeval.getAlignedSequence().toString() ); }*/ } sheet.createRow(k++); } try { Path tempfile = Files.createTempFile("enzyme", ".xlsx"); OutputStream os = Files.newOutputStream(tempfile); workbook.write(os); os.close(); Desktop.getDesktop().open(tempfile.toFile()); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(excelreport); ftable.setContextMenu(fpopup); ContextMenu popup = new ContextMenu(); MenuItem splitaction = new MenuItem("Split"); splitaction.setOnAction(e -> { Dialog<Set<GeneGroup>> dialog = new Dialog<>(); dialog.setResizable(true); GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(20, 20, 10, 10)); TextField len = new TextField(); len.setPromptText("0.5"); TextField id = new TextField(); id.setPromptText("0.5"); grid.add(new Label("%Length:"), 0, 0); grid.add(len, 1, 0); grid.add(new Label("%Identity:"), 0, 1); grid.add(id, 1, 1); final ListView<GeneGroup> list = new ListView<>(); list.setPrefWidth(400); grid.add(list, 0, 2, 2, 1); final GeneGroup gg = table.getSelectionModel().getSelectedItem(); list.setItems(FXCollections.singletonObservableList(gg)); Label groupsize = new Label("" + gg.genes.size()); grid.add(groupsize, 0, 3, 2, 1); len.textProperty().addListener((observable, oldValue, newValue) -> { if (!newValue.equals(oldValue)) { double d = 0; try { d = Double.parseDouble(newValue); } catch (Exception ex) { } if (d > 0) { Set<GeneGroup> ggmap = new HashSet<>(); Map<String, Integer> blosumMap = JavaFasta.getBlosumMap(false); for (Gene gene : gg.genes) { if (ggmap.stream().flatMap(f -> f.genes.stream()).noneMatch(p -> gene == p)) { Set<Gene> ggset = new HashSet<>(); Sequence seq1 = gene.tegeval.getAlignedSequence(); for (Gene cgene : gg.genes) { Sequence seq2 = cgene.tegeval.getAlignedSequence(); int[] tscore = GeneCompare.blosumValue(seq1, seq1, seq2, blosumMap); int sscore = GeneCompare.blosumValue(seq1, seq2, blosumMap); double dval = (double) (sscore - tscore[1]) / (double) (tscore[0] - tscore[1]); if (dval > d) { ggset.add(cgene); } } System.err.println(ggset.size()); Set<GeneGroup> osubgg = ggmap.stream().filter(f -> { Set<Gene> gs = new HashSet<>(ggset); gs.retainAll(f.genes); return gs.size() > 0; }).collect(Collectors.toSet()); GeneGroup subgg; if (osubgg.size() > 0) { Iterator<GeneGroup> git = osubgg.iterator(); subgg = git.next(); while (git.hasNext()) { GeneGroup remgg = git.next(); subgg.addGenes(remgg.genes); ggmap.remove(remgg); } } else { subgg = new GeneGroup(); subgg.setCogMap(gg.getCogMap()); subgg.setKonameMap(gg.getKonameMap()); subgg.setSpecSet(gg.getSpecSet()); ggmap.add(subgg); } subgg.addGenes(ggset); } } Set<GeneGroup> sgg = ggmap.stream().collect(Collectors.toSet()); List<GeneGroup> lgg = new ArrayList(sgg); list.setItems(FXCollections.observableList(lgg)); dialog.setResultConverter(param -> sgg); } } }); dialog.getDialogPane().setContent(grid); dialog.getDialogPane().getButtonTypes().add(ButtonType.OK); dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL); Optional<Set<GeneGroup>> ogg = dialog.showAndWait(); ogg.ifPresent(c -> { geneset.allgenegroups.remove(gg); geneset.allgenegroups.addAll(c); Map<String, String> env = new HashMap<>(); env.put("create", "true"); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { Files.walk(root).filter(f -> f.toString().startsWith("/aligned")) .filter(f -> f.toString().endsWith(".aa")).filter(f -> { String filename = f.getFileName().toString(); return gg.genes.stream().anyMatch(g -> { String fnid = filename.substring(0, filename.length() - 3); return g.name.equals(fnid); }); }).forEach(p -> { try { Files.deleteIfExists(p); } catch (IOException e1) { e1.printStackTrace(); } }); /*for( Gene g : gg.genes ) { if( g.keggpathway != null ) { String sub = g.keggpathway.substring(0,3); Path subf = root.resolve(sub); if( Files.exists(subf) ) { String[] split = g.keggpathway.split(" "); for( String s : split ) { Path pimg = subf.resolve(s+".png"); if( Files.exists(pimg) ) { showKeggPathway( sub, pimg ); } } } } }*/ final Path p = root.resolve("/aligned"); c.stream().forEach(fgg -> { Path np = p.resolve(fgg.genes.iterator().next().getName()); try { Writer w = Files.newBufferedWriter(np); fgg.getFasta(w, false); w.close(); } catch (IOException e1) { e1.printStackTrace(); } }); break; } geneset.zipfilesystem.close(); } catch (Exception ex) { ex.printStackTrace(); } }); }); popup.getItems().add(splitaction); MenuItem joinaction = new MenuItem("Join"); popup.getItems().add(joinaction); popup.getItems().add(new SeparatorMenuItem()); MenuItem showkegg = new MenuItem("Show KEGG pathway"); showkegg.setOnAction(e -> { GeneGroup gg = table.getSelectionModel().getSelectedItem(); Map<String, String> env = new HashMap<>(); env.put("create", "true"); /*String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create( uristr /*.replace("file://", "file:")* ); final List<Path> lbi = new ArrayList<>();*/ boolean shown = false; try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (Gene g : gg.genes) { if (g.keggpathway != null) { String sub = g.keggpathway.substring(0, 3); Path subf = root.resolve(sub); if (Files.exists(subf)) { String[] split = g.keggpathway.split(" "); for (String s : split) { Path pimg = subf.resolve(s + ".png"); if (Files.exists(pimg)) { showKeggPathway(sub, pimg); shown = true; break; } } } } } break; } geneset.zipfilesystem.close(); } catch (Exception ex) { ex.printStackTrace(); } if (!shown) { for (Gene g : gg.genes) { if (g.keggpathway != null) { String[] keggsplit = g.keggpathway.split(";"); Arrays.stream(keggsplit).map(s -> s.split(":")[0]).findFirst().ifPresent(c -> { try { Desktop.getDesktop().browse( URI.create("http://www.genome.jp/dbget-bin/www_bget?map" + c.substring(2))); } catch (IOException e1) { e1.printStackTrace(); } }); } } } }); popup.getItems().add(showkegg); MenuItem plasmid = new MenuItem("Plasmid"); plasmid.setOnAction(e -> { Gene g = gtable.getSelectionModel().getSelectedItem(); Sequence contig = g.tegeval.getContshort(); String contigstr = contig.toString(); contig.plasmid = !geneset.plasmids.contains(contigstr); if (contig.plasmid) geneset.plasmids.add(contigstr); else geneset.plasmids.remove(contigstr); try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); //fs = FileSystems.newFileSystem( uri, env ); //FileSystem fs = FileSystems.newFileSystem(uri, env); ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (String contigname : geneset.plasmids) { baos.write((contigname + "\n").getBytes()); } Path nf = geneset.zipfilesystem.getPath("/plasmids.txt"); long bl = Files.copy(new ByteArrayInputStream(baos.toByteArray()), nf, StandardCopyOption.REPLACE_EXISTING); //System.err.println( "eeerm " + bl ); geneset.zipfilesystem.close(); /*Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE); for( String phage : phageset ) { writer.write( phage + "\n" ); } writer.close();*/ //writer.write("hello"); } catch (IOException e1) { e1.printStackTrace(); } }); popup.getItems().add(plasmid); MenuItem designate = new MenuItem("Designate"); designate.setOnAction(e -> { SwingUtilities.invokeLater(() -> { JComboBox<String> descombo = new JComboBox<>( geneset.deset.toArray(new String[geneset.deset.size()])); descombo.setEditable(true); JOptionPane.showMessageDialog(GeneSetHead.this, descombo); String val = descombo.getSelectedItem().toString(); geneset.deset.add(val); for (Gene g : gtable.getSelectionModel().getSelectedItems()) { g.tegeval.designation = val; if (g.id != null) { geneset.designations.put(g.id, val); } else { System.err.println(g.refid); } //ta.append( g.tegeval.id + "\n" ); } try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); //fs = FileSystems.newFileSystem( uri, env ); //FileSystem fs = FileSystems.newFileSystem(uri, env); ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (String geneid : geneset.designations.keySet()) { String design = geneset.designations.get(geneid); baos.write((geneid + "\t" + design + "\n").getBytes()); } Path nf = geneset.zipfilesystem.getPath("/designations.txt"); long bl = Files.copy(new ByteArrayInputStream(baos.toByteArray()), nf, StandardCopyOption.REPLACE_EXISTING); //System.err.println( "eeerm " + bl ); geneset.zipfilesystem.close(); /*Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE); for( String phage : phageset ) { writer.write( phage + "\n" ); } writer.close();*/ //writer.write("hello"); } catch (IOException e1) { e1.printStackTrace(); } /*JFrame frame = new JFrame("Ids"); frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE ); frame.setSize(800, 600); JTextArea ta = new JTextArea(); JScrollPane sp = new JScrollPane( ta ); frame.add( sp ); frame.setVisible( true );*/ }); }); popup.getItems().add(designate); MenuItem koname = new MenuItem("KO to name"); koname.setOnAction(e -> { Set<String> koids = new HashSet<>(); for (Gene g : geneset.genelist) { if (g.koid != null && g.koid.length() > 0 && !(geneset.ko2name != null && geneset.ko2name.containsKey(g.koid))) koids.add(g.koid); } try { Map<String, String> ko2name = new HashMap<>(); int cnt = 0; for (String koid : koids) { URL url = new URL("http://www.kegg.jp/dbget-bin/www_bget?ko:" + koid); InputStream is0 = url.openStream(); StringBuilder sb = new StringBuilder(); BufferedReader br0 = new BufferedReader(new InputStreamReader(is0)); String line0 = br0.readLine(); while (line0 != null) { sb.append(line0); line0 = br0.readLine(); } br0.close(); int i = sb.indexOf("<nobr>Name</nobr>"); if (i != -1) { int k = sb.indexOf(":hidden\">"); if (k != -1) { k = sb.indexOf(":hidden\">", k + 9); if (k != -1) { String koname0 = sb.substring(k + 9, sb.indexOf("<br>", k)); ko2name.put(koid, koname0); System.err.println(koid + "\t" + koname0); } } } System.err.println(ko2name.size() + " " + koids.size()); //if( cnt++ > 20 ) break; } FileWriter fw = new FileWriter("~ko2name.txt"); for (String koid : ko2name.keySet()) { fw.write(koid + "\t" + ko2name.get(koid) + "\n"); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } }); popup.getItems().add(koname); popup.getItems().add(new SeparatorMenuItem()); MenuItem genegainloss = new MenuItem("Gene gain/loss"); genegainloss.setOnAction(e -> { Map<Node, List<GeneGroup>> nodeGainMap = new HashMap<>(); Map<Node, List<GeneGroup>> nodeLossMap = new HashMap<>(); /*String treestr = ""; JFileChooser fc = new JFileChooser(); if( fc.showOpenDialog( applet ) == JFileChooser.APPROVE_OPTION ) { File file = fc.getSelectedFile(); try { byte[] bb = Files.readAllBytes( Paths.get(file.toURI()) ); treestr = new String( bb ); } catch (IOException e1) { e1.printStackTrace(); } }*/ Serifier serifier = getConcatenatedSequences(false, true); String tree = serifier.getFastTree(serifier.lseq, geneset.user, false); TreeUtil tu = new TreeUtil(); Node n = tu.parseTreeRecursive(tree, false); TableModel model = new TableModel() { @Override public int getRowCount() { return geneset.getSpecies().size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int columnIndex) { return null; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return geneset.getSpecies().get(rowIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; JTable table = new JTable(model); table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scroll = new JScrollPane(table); FlowLayout flowlayout = new FlowLayout(); JComponent c = new JComponent() { }; c.setLayout(flowlayout); c.add(scroll); JOptionPane.showMessageDialog(comp, c); List<String> rootgroup = new ArrayList<>(); int[] rr = table.getSelectedRows(); for (int r : rr) { rootgroup.add((String) table.getValueAt(r, 0)); } //String[] sobj = {"mt.ruber", "mt.silvanus", "o.profundus", "m.hydrothermalis"}; Node newnode = tu.getParent(n, new HashSet<>(rootgroup)); tu.rerootRecur(n, newnode); File f = new File("/home/sigmar/gain_list.txt"); try { PrintStream ps = new PrintStream(f); geneset.assignGain(newnode, nodeGainMap, ps); ps.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } f = new File("/home/sigmar/loss_list.txt"); try { PrintStream ps = new PrintStream(f); geneset.assignLoss(newnode, nodeLossMap, ps); ps.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } }); popup.getItems().add(genegainloss); MenuItem concattree = new MenuItem("Concatenate tree"); concattree.setOnAction(e -> { Serifier serifier = getConcatenatedSequences(false, true); boolean succ = true; if (comp instanceof Applet) { try { JSObject win = JSObject.getWindow((Applet) comp); StringWriter sw = new StringWriter(); serifier.writeFasta(serifier.lseq, sw, null); sw.close(); win.call("fasttree", new Object[] { sw.toString() }); } catch (NoSuchMethodError | Exception e1) { e1.printStackTrace(); succ = false; } } /*if( !succ ) { String tree = serifier.getFastTree(); if( cs.connections().size() > 0 ) { cs.sendToAll( tree ); } else if( Desktop.isDesktopSupported() ) { cs.message = tree; //String uristr = "http://webconnectron.appspot.com/Treedraw.html?tree="+URLEncoder.encode( tree, "UTF-8" ); String uristr = "http://webconnectron.appspot.com/Treedraw.html?ws=127.0.0.1:8887"; try { Desktop.getDesktop().browse( new URI(uristr) ); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } } System.err.println( tree ); }*/ showAlignedSequences(comp, serifier); }); popup.getItems().add(concattree); MenuItem majocons = new MenuItem("Majority rule consensus"); majocons.setOnAction(e -> { Serifier serifier = new Serifier(); Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); if (!isGeneview()) { genegroups.addAll(table.getSelectionModel().getSelectedItems()); } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { genegroups.add(gg.getGeneGroup()); } } TreeUtil treeutil = new TreeUtil(); Map<Set<String>, NodeSet> nmap = new HashMap<Set<String>, NodeSet>(); for (GeneGroup ggroup : genegroups) { //List<Sequence> seqlist = new ArrayList<Sequence>(); for (Tegeval tv : ggroup.getTegevals()) { String spec = tv.getContshort().getSpec(); Sequence seq = tv.getAlignedSequence(); //Sequence seq = new Sequence( spec, null ); //if( seqstr != null && seqstr.length() > 0 ) seq.append( seqstr ); serifier.addSequence(seq); } String tree = serifier.getFastTree(serifier.lseq, geneset.user, false); Node n = treeutil.parseTreeRecursive(tree, false); treeutil.setLoc(0); n.nodeCalcMap(nmap); } Node guidetree = null; /*********************************** Serifier serifier = getConcatenatedSequences(); String tree = serifier.getFastTree(); guidetree = treeutil.parseTreeRecursive( tree, false );*/ Node root = DataTable.majoRuleConsensus(treeutil, nmap, guidetree, false); String tree = root.toString(); if (geneset.cs.connections().size() > 0) { geneset.cs.sendToAll(tree); } else if (Desktop.isDesktopSupported()) { geneset.cs.message = tree; //String uristr = "http://webconnectron.appspot.com/Treedraw.html?tree="+URLEncoder.encode( tree, "UTF-8" ); String uristr = "http://webconnectron.appspot.com/Treedraw.html?ws=127.0.0.1:8887"; try { Desktop.getDesktop().browse(new URI(uristr)); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } } }); popup.getItems().add(majocons); MenuItem addsim = new MenuItem("Add similar"); addsim.setOnAction(e -> { /*int r = table.getSelectedRow(); int c = table.getSelectedColumn(); Object o = table.getValueAt(r, c); if (c >= 18) { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (no != null && !table.isRowSelected(i)) table.addRowSelectionInterval(i, i); } } else { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (o.equals(no) && !table.isRowSelected(i)) table.addRowSelectionInterval(i, i); } }*/ }); popup.getItems().add(addsim); MenuItem selsim = new MenuItem("Select similar"); selsim.setOnAction(e -> { /*int r = table.getSelectedRow(); int c = table.getSelectedColumn(); Object o = table.getValueAt(r, c); table.removeRowSelectionInterval(0, table.getRowCount() - 1); if (c >= 18) { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (no != null) table.addRowSelectionInterval(i, i); } } else { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (o.equals(no)) table.addRowSelectionInterval(i, i); } }*/ }); popup.getItems().add(selsim); MenuItem tabtxt = new MenuItem("Table text"); tabtxt.setOnAction(e -> { /*JTextArea ta = new JTextArea(); ta.setDragEnabled(true); JScrollPane scrollpane = new JScrollPane(ta); StringBuilder sb = new StringBuilder(); int[] rr = table.getSelectedRows(); for (int r : rr) { for (int c = 0; c < table.getColumnCount() - 1; c++) { Object o = table.getValueAt(r, c); if (c > 18) { if (o != null) { String val = o.toString(); int k = val.indexOf(' '); sb.append(val.substring(0, k)); sb.append("\t" + val.substring(k + 1)); } else sb.append("\t"); } else { if (o != null) { sb.append(o.toString()); } } sb.append("\t"); } Object o = table.getValueAt(r, table.getColumnCount() - 1); if (o != null) { String val = o.toString(); int k = val.indexOf(' '); sb.append(val.substring(0, k)); sb.append("\t" + val.substring(k + 1)); } else sb.append("\t"); sb.append("\n"); } ta.setText(sb.toString()); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true);*/ }); popup.getItems().add(tabtxt); popup.getItems().add(new SeparatorMenuItem()); MenuItem ncbil = new MenuItem("NCBI lookup"); ncbil.setOnAction(e -> { /*int r = table.getSelectedRow(); if (r >= 0) { String ref = (String) table.getValueAt(r, 2); try { Desktop.getDesktop().browse(new URI("http://www.ncbi.nlm.nih.gov/gene?term=" + ref)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }*/ }); popup.getItems().add(ncbil); table.setContextMenu(popup); gtable.setContextMenu(popup); TableColumn<Function, String> gocol = new TableColumn("GO"); gocol.setCellValueFactory(new PropertyValueFactory<>("go")); ftable.getColumns().add(gocol); TableColumn<Function, String> ecfcol = new TableColumn("EC"); ecfcol.setCellValueFactory(new PropertyValueFactory<>("ec")); ftable.getColumns().add(ecfcol); TableColumn<Function, String> metacyccol = new TableColumn("MetaCyc"); metacyccol.setCellValueFactory(new PropertyValueFactory<>("metacyc")); ftable.getColumns().add(metacyccol); TableColumn<Function, String> keggcol = new TableColumn("KEGG"); keggcol.setCellValueFactory(new PropertyValueFactory<>("kegg")); ftable.getColumns().add(keggcol); TableColumn<Function, String> funcovcol = new TableColumn("Funciton coverage"); funcovcol.setCellValueFactory(new PropertyValueFactory<>("speciesCount")); ftable.getColumns().add(funcovcol); TableColumn<Function, String> numprotcol = new TableColumn("Number of proteins"); numprotcol.setCellValueFactory(new PropertyValueFactory<>("groupCount")); ftable.getColumns().add(numprotcol); TableColumn<Function, String> namecol = new TableColumn("Name"); namecol.setCellValueFactory(new PropertyValueFactory<>("name")); ftable.getColumns().add(namecol); TableColumn<Function, String> namespacecol = new TableColumn("Namespace"); namespacecol.setCellValueFactory(new PropertyValueFactory<>("namespace")); ftable.getColumns().add(namespacecol); TableColumn<Function, String> desccol = new TableColumn("Desc"); desccol.setCellValueFactory(new PropertyValueFactory<>("desc")); ftable.getColumns().add(desccol); ftable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); //ftable.setAutoCreateRowSorter(true); /*ftablemodel = new TableModel() { @Override public int getRowCount() { return geneset.funclist.size(); } @Override public int getColumnCount() { return 9; } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) return "GO"; else if (columnIndex == 1) return "EC"; else if (columnIndex == 2) return "MetaCyc"; else if (columnIndex == 3) return "KEGG"; else if (columnIndex == 4) return "Function coverage"; else if (columnIndex == 5) return "Number of proteins"; else if (columnIndex == 6) return "Name"; else if (columnIndex == 7) return "Namespace"; else if (columnIndex == 8) return "Def"; return ""; } @Override public Class<?> getColumnClass(int columnIndex) { if( columnIndex == 4 || columnIndex == 5 ) return Integer.class; return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Function func = geneset.funclist.get(rowIndex); if( columnIndex == 0 ) return func.go; else if( columnIndex == 1 ) return func.ec; else if( columnIndex == 2 ) return func.metacyc; else if( columnIndex == 3 ) return func.kegg; else if( columnIndex == 4 ) return func.getSpeciesCount(); else if( columnIndex == 5 ) return table.getModel() == groupModel ? func.getGroupSize() : func.getGeneCount(); else if( columnIndex == 6 ) return func.name; else if( columnIndex == 7 ) return func.namespace; else if( columnIndex == 8 ) return func.desc; return null; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; ftable.setModel( ftablemodel ); fscrollpane.setViewportView(ftable);*/ updateFilter(ftable, null); updateFilter(table, label); combo.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { String sel = newValue; filterset.clear(); if (geneset.pathwaymap.containsKey(sel)) { Set<String> enz = geneset.pathwaymap.get(sel); for (Function f : geneset.funclist) { if (f.getEc() != null && enz.contains(f.getEc())) { filterset.add(f.index); } } } updateFilter(ftable, null); }); specombo.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { String sel = newValue; genefilterset.clear(); for (Gene g : geneset.genelist) { Tegeval tv = g.tegeval; if (sel.equals(tv.teg)) { //System.out.println(g.name + " " + sp + " " + sel + " " + tv.eval); genefilterset.add(g.index); } } updateFilter(table, label); }); MenuItem findcon = new MenuItem("Find conserved terms"); findcon.setOnAction(e -> { Set<Integer> res = new HashSet<>(); for (Function f : geneset.funclist) { if (f.getGeneGroups() != null) { Set<String> check = new HashSet<>(); for (GeneGroup g : f.getGeneGroups()) { //Gene g = genemap.get(str); if (g.species != null) { if (check.isEmpty()) check.addAll(g.species.keySet()); else if (!(check.size() == g.species.size() && check.containsAll(g.species.keySet()))) { check.clear(); break; } } } if (!check.isEmpty()) res.add(f.index); } } filterset.clear(); for (int i : res) { filterset.add(i); } updateFilter(ftable, null); }); fpopup.getItems().add(findcon); fpopup.getItems().add(new SeparatorMenuItem()); MenuItem showgen = new MenuItem("Show genes"); showgen.setOnAction(e -> { genefilterset.clear(); Set<GeneGroup> sset = new HashSet<>(); for (Function f : (ObservableList<Function>) ftable.getSelectionModel().getSelectedItems()) { if (!isGeneview()) { sset.addAll(f.getGeneGroups()); /*if( sset != null ) for (GeneGroup gg : sset) { //Gene g = genemap.get(s); genefilterset.add(gg.index); }*/ } else { /*Set<Gene> sset = f.getGeneentries(); for (Gene g : sset) { //Gene g = genemap.get(s); genefilterset.add(g.index); }*/ } } //int[] rows = sset.stream().mapToInt( gg -> sortedData.indexOf(gg) ).toArray(); //table.getSelectionModel().selectIndices(rows[0], rows); filteredData.setPredicate(genegroup -> { return sset.contains(genegroup); }); if (label != null) label.setText( table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size()); }); fpopup.getItems().add(showgen); table.getSelectionModel().selectedItemProperty().addListener(e -> { // table.clearSelection(); tableisselecting = true; if (!ftableisselecting && filterset.isEmpty()) { //ftable.removeRowSelectionInterval(0, ftable.getRowCount() - 1); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { for (Function f : gg.getFunctions()) { try { ftable.getSelectionModel().select(f); //int rf = ftable.convertRowIndexToView(f.index); //if( rf >= 0 && rf < ftable.getRowCount() ) ftable.addRowSelectionInterval(rf, rf); } catch (Exception ex) { ex.printStackTrace(); } } } } else { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { if (g.funcentries != null) { for (Function f : g.funcentries) { //Function f = funcmap.get(go); try { ftable.getSelectionModel().select(f); //int rf = ftable.convertRowIndexToView(f.index); //if( rf >= 0 && rf < ftable.getRowCount() ) ftable.addRowSelectionInterval(rf, rf); } catch (Exception ex) { ex.printStackTrace(); } } } } } } tableisselecting = false; }); ftable.setOnKeyPressed(ke -> { if (ke.getCode() == KeyCode.ESCAPE) { ffilteredData.setPredicate(null); } }); table.setOnKeyPressed(ke -> { if (ke.getCode() == KeyCode.ESCAPE) { GeneGroup selgg = table.getSelectionModel().getSelectedItem(); List<GeneGroup> sel = new ArrayList<>(filteredData); filteredData.setPredicate(null); int[] rows = sel.stream().mapToInt(gg -> sortedData.indexOf(gg)).toArray(); if (rows.length > 0) table.getSelectionModel().selectIndices(rows[0], rows); if (label != null) label.setText( table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size()); table.scrollTo(selgg); //genefilterset.clear(); //updateFilter(table, genefilter, label); //geneset.scrollToSelection( table ); } }); table.setOnMousePressed(e -> { tableisselecting = true; if (!ftableisselecting && e.getClickCount() == 2) { /* * int[] rr = ftable.getSelectedRows(); int minr = * ftable.getRowCount(); int maxr = 0; for( int r : rr ) { * if( r < minr ) minr = r; if( r > maxr ) maxr = r; } * ftable.removeRowSelectionInterval(minr, maxr); */ // ftable.removeRowSelectionInterval(0, filterset.isEmpty() // ? ftable.getRowCount()-1 : filterset.size()-1 ); Set<Function> fset = new HashSet<>(); filterset.clear(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { fset.addAll(gg.getFunctions()); } } else { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { if (g.funcentries != null) { for (Function f : g.funcentries) { //Function f = funcmap.get(go); // ftable.getRowSorter().convertRowIndexToView(index) // int rf = ftable.convertRowIndexToView( // f.index ); filterset.add(f.index); // ftable.addRowSelectionInterval(rf, rf); } } } } ffilteredData.setPredicate(p -> fset.contains(p)); } tableisselecting = false; }); ftable.setOnMousePressed(e -> { ftableisselecting = true; Set<GeneGroup> ggset = new HashSet<>(); if (!tableisselecting && e.getClickCount() == 2) { genefilterset.clear(); for (Function f : (ObservableList<Function>) ftable.getSelectionModel().getSelectedItems()) { if (f.getGeneentries() != null) { if (!isGeneview()) { ggset.addAll(f.getGeneGroups()); } else { for (Gene g : f.getGeneentries()) { //Gene g = genemap.get(ref); // int rf = table.convertRowIndexToView( g.index // ); // table.addRowSelectionInterval(rf, rf); genefilterset.add(g.index); } } } } filteredData.setPredicate(p -> ggset.contains(p)); } ftableisselecting = false; }); ftable.getSelectionModel().selectedItemProperty().addListener(e -> { ftableisselecting = true; if (!tableisselecting && genefilterset.isEmpty()) { table.getSelectionModel().clearSelection(); //table.removeRowSelectionInterval(0, table.getRowCount() - 1); for (Function f : ftable.getSelectionModel().getSelectedItems()) { if (f.getGeneentries() != null) { for (Gene g : f.getGeneentries()) { table.getSelectionModel().select(g.getGeneGroup()); //Gene g = genemap.get(ref); /*int i = g.getGroupIndex(); if( i >= 0 && i <= table.getItems().size() ) { int rf = table.convertRowIndexToView(i); table.addRowSelectionInterval(rf, rf); }*/ } } } } ftableisselecting = false; }); textfield.setOnKeyPressed(e -> { String text = textfield.getText().toLowerCase(); if (e.getCode() == KeyCode.ENTER) { searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable(table, text, searchi, e.isAltDown(), 8, 9, 10, 16) : searchTable(table, text, searchi, e.isAltDown(), 0); } }); textfield.textProperty().addListener((observable, oldValue, newValue) -> { //String text = textfield.getText().toLowerCase(); String lowerCaseFilter = newValue.toLowerCase(); Predicate<GeneGroup> p = genegroup -> { if (newValue == null || newValue.isEmpty()) { return true; } if (searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol")) { if ((genegroup.getCogsymbol() != null && genegroup.getCogsymbol().toLowerCase().contains(lowerCaseFilter)) || (genegroup.getSymbol() != null && genegroup.getSymbol().toLowerCase().contains(lowerCaseFilter)) || (genegroup.getKoname() != null && genegroup.getKoname().toLowerCase().contains(lowerCaseFilter))) { return true; // Filter matches first name. } } else { if (genegroup.getName().toLowerCase().contains(lowerCaseFilter) || genegroup.genes.stream() .anyMatch(gg -> gg.getName().toLowerCase().contains(lowerCaseFilter))) { return true; // Filter matches first name. } /* else if (genegroup.getLastName().toLowerCase().contains(lowerCaseFilter)) { return true; // Filter matches last name. }*/ } return false; // Does not match. }; if (filter.isSelected()) { filteredData.setPredicate(p); if (label != null) label.setText( table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size()); //if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(0, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 ); //else updateFilter(0, text, table, genefilter, genefilterset, label, 0 ); } else { Optional<GeneGroup> ogg = filteredData.stream().filter(p).findFirst(); if (ogg.isPresent()) { GeneGroup gg = ogg.get(); table.getSelectionModel().select(gg); table.scrollTo(gg); } //searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } }); /*textfield.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { String text = textfield.getText().toLowerCase(); if( filter.isSelected() ) { if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(0, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 ); else updateFilter(0, text, table, genefilter, genefilterset, label, 0 ); } else { searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } } public void insertUpdate(DocumentEvent e) { String text = textfield.getText().toLowerCase(); if( filter.isSelected() ) { if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(1, text, table, genefilter, genefilterset, label, 8, 9, 10, 16); else updateFilter(1, text, table, genefilter, genefilterset, label, 0); } else { searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } } public void removeUpdate(DocumentEvent e) { String text = textfield.getText().toLowerCase(); if( filter.isSelected() ) { if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(2, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 ); else updateFilter(2, text, table, genefilter, genefilterset, label, 0); } else { searchi = searchTable( table, text, 0, false, searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? 7 : 0 ); } } });*/ ftextfield.textProperty().addListener(new javafx.beans.value.ChangeListener<String>() { public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { //String text = textfield.getText().toLowerCase(); if (filter.isSelected()) { ffilteredData.setPredicate(function -> { // If filter text is empty, display all persons. if (newValue == null || newValue.isEmpty()) { return true; } // Compare first name and last name of every person with filter text. String lowerCaseFilter = newValue.toLowerCase(); boolean desc = function.getDesc() != null && function.getDesc().toLowerCase().contains(lowerCaseFilter); boolean name = function.getName() != null && function.getName().toLowerCase().contains(lowerCaseFilter); boolean go = function.getGo() != null && function.getGo().toLowerCase().contains(lowerCaseFilter); boolean ec = function.getEc() != null && function.getEc().toLowerCase().contains(lowerCaseFilter); if (desc || name || go || ec) { return true; // Filter matches first name. } /* else if (genegroup.getLastName().toLowerCase().contains(lowerCaseFilter)) { return true; // Filter matches last name. }*/ return false; // Does not match. }); } else { //searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } } }); /*ftextfield.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { updateFilter(0, ftextfield.getText(), ftable, rowfilter, filterset, null, 6); } public void insertUpdate(DocumentEvent e) { updateFilter(1, ftextfield.getText(), ftable, rowfilter, filterset, null, 6); } public void removeUpdate(DocumentEvent e) { updateFilter(2, ftextfield.getText(), ftable, rowfilter, filterset, null, 6); } });*/ MenuItem kegggl = new MenuItem("KEGG gene lookup"); kegggl.setOnAction(e -> { Gene g = gtable.getSelectionModel().getSelectedItem(); try { Desktop.getDesktop().browse(new URI("http://www.genome.jp/dbget-bin/www_bget?" + g.keggid)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); popup.getItems().add(kegggl); MenuItem showgenes = new MenuItem("Show genes with same sharing"); showgenes.setOnAction(e -> { genefilterset.clear(); GeneGroup gg = table.getSelectionModel().getSelectedItem(); for (GeneGroup g : geneset.allgenegroups) { if (gg.species != null && g.species != null) { Set<String> ggset = gg.species.keySet(); Set<String> gset = g.species.keySet(); if (gset.size() == ggset.size() && gset.containsAll(ggset)) { genefilterset.add(g.index); } } } updateFilter(table, label); }); popup.getItems().add(showgenes); MenuItem showshared = new MenuItem("Show shared function"); showshared.setOnAction(e -> { filterset.clear(); Set<Function> startfunc = new HashSet<Function>(); if (isGeneview()) { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { if (gg.funcentries != null) { if (startfunc.isEmpty()) { startfunc.addAll(gg.funcentries); } else { startfunc.retainAll(gg.funcentries); } } /*if (startfunc == null) startfunc = new HashSet<Function>(gg.funcentries); else { startfunc.retainAll(gg.funcentries); }*/ } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { Set<Function> fset = gg.getFunctions(); if (startfunc.isEmpty()) { startfunc.addAll(fset); } else { startfunc.retainAll(fset); } } } for (Function f : geneset.funclist) { filterset.add(f.index); } updateFilter(ftable, null); }); popup.getItems().add(showshared); MenuItem showall = new MenuItem("Show all functions"); showall.setOnAction(e -> { filterset.clear(); Set<Function> startfunc = null; if (isGeneview()) { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { if (gg.funcentries != null) { for (Function f : gg.funcentries) { filterset.add(f.index); } } } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { Set<Function> fset = gg.getFunctions(); for (Function f : fset) { filterset.add(f.index); } } } updateFilter(ftable, null); }); popup.getItems().add(showall); popup.getItems().add(new SeparatorMenuItem()); MenuItem showgenegroups = new MenuItem("Show gene groups in proximity"); showgenegroups.setOnAction(e -> { proxi(filteredData, false); updateFilter(table, label); }); popup.getItems().add(showgenegroups); MenuItem selgenegroups = new MenuItem("Select gene groups in proximity"); selgenegroups.setOnAction(e -> { genefilterset.clear(); proxi(filteredData, false); for (int i : genefilterset) { table.getSelectionModel().select(i); } //table.tableChanged( new TableModelEvent( table.getModel() ) ); if (label != null) label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size()); //updateFilter(table, genefilter, label); }); popup.getItems().add(selgenegroups); MenuItem selgenes = new MenuItem("Select genes in proximity"); selgenes.setOnAction(e -> { genefilterset.clear(); proxi(filteredData, true); for (int i : genefilterset) { table.getSelectionModel().select(i); } //table.tableChanged( new TableModelEvent( table.getModel() ) ); if (label != null) label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size()); //updateFilter(table, genefilter, label); }); popup.getItems().add(selgenes); MenuItem addgene = new MenuItem("Add gene groups in proximity"); addgene.setOnAction(e -> { proxi(filteredData, false); updateFilter(table, label); }); popup.getItems().add(addgene); MenuItem remgene = new MenuItem("Remove gene groups in proximity"); remgene.setOnAction(e -> { ObservableList<Integer> rr = table.getSelectionModel().getSelectedIndices(); if (genefilterset.isEmpty()) { Set<Integer> ii = new HashSet<>(); for (int r : rr) ii.add(r); for (int i = 0; i < geneset.genelist.size(); i++) { if (!ii.contains(i)) genefilterset.add(i); } } proxi(filteredData, false); updateFilter(table, label); }); popup.getItems().add(remgene); popup.getItems().add(new SeparatorMenuItem()); MenuItem showrel = new MenuItem("Show related genes"); showrel.setOnAction(e -> { genefilterset.clear(); relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, false); updateFilter(gtable, label); }); popup.getItems().add(showrel); MenuItem addrel = new MenuItem("Add related genes"); addrel.setOnAction(e -> { relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, false); updateFilter(gtable, label); }); popup.getItems().add(addrel); MenuItem remrel = new MenuItem("Remove related genes"); remrel.setOnAction(e -> { ObservableList<Integer> rr = gtable.getSelectionModel().getSelectedIndices(); if (genefilterset.isEmpty()) { Set<Integer> ii = new HashSet<>(); for (int r : rr) ii.add(r); for (int i = 0; i < geneset.genelist.size(); i++) { if (!ii.contains(i)) genefilterset.add(i); } } relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, true); updateFilter(table, label); }); popup.getItems().add(remrel); popup.getItems().add(new SeparatorMenuItem()); MenuItem showcloserel = new MenuItem("Show closely related genes"); showcloserel.setOnAction(e -> { genefilterset.clear(); Set<String> ct = new HashSet<>(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { // genefilterset.add( gg.index ); Tegeval tv = gg.tegeval; for (Set<String> uset : geneset.iclusterlist) { if (uset.contains(tv.name)) { ct.addAll(uset); break; } } } for (Gene g : geneset.genelist) { Tegeval tv = g.tegeval; if (ct.contains(tv.name)) { genefilterset.add(g.index); break; } } updateFilter(table, label); }); popup.getItems().add(showcloserel); MenuItem showdist = new MenuItem("Show distance matrix"); showdist.setOnAction(e -> { JTextArea textarea = new JTextArea(); try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true); JScrollPane scrollpane = new JScrollPane(textarea); Gene gg = gtable.getSelectionModel().getSelectedItem(); if (gg.getSpecies() != null) { for (String s : geneset.corrInd) { if (s.equals(geneset.corrInd.get(0))) textarea.append(s); else textarea.append("\t" + s); } int i = 0; int j = 0; int len = 16; double[] min = new double[len]; double[] max = new double[len]; for (i = 0; i < len; i++) { min[i] = Double.MAX_VALUE; max[i] = 0.0; } double[] corrarr = gg.corrarr; boolean symmetrize = true; if (symmetrize) { for (i = 0; i < len; i++) { for (int k = i + 1; k < len; k++) { corrarr[i * len + k] = (corrarr[k * len + i] + corrarr[i * len + k]) / 2.0; corrarr[k * len + i] = corrarr[i * len + k]; } } } for (i = 0; i < len; i++) { for (int k = 0; k < len; k++) { if (corrarr[i * len + k] < min[i]) min[i] = corrarr[i * len + k]; if (corrarr[i * len + k] > max[i]) max[i] = corrarr[i * len + k]; } /*for (int k = 0; k < len; k++) { corrarr[i * 16 + k] = corrarr[i * 16 + k] - min; }*/ } i = 0; for (double d : corrarr) { double dval = d; if (i % len == 0) textarea.append("\n" + dval); else textarea.append("\t" + dval); i++; } textarea.append("\n"); i = 0; for (double d : corrarr) { double dval = Math.exp((d - min[i / len]) / 20.0 + 1.0) / 100.0; // 0.0 ? // 0.0 : // 100.0/d; if (i % len == 0) textarea.append("\n" + dval); else textarea.append("\t" + dval); i++; } double[] newcorr = Arrays.copyOf(corrarr, corrarr.length); textarea.append("\nD matrix\n"); i = 0; for (double d : corrarr) { double dval = max[i / len] - d; newcorr[i] = dval; if (i % len == 0) textarea.append("\n" + dval); else textarea.append("\t" + dval); i++; } TreeUtil treeutil = new TreeUtil(); treeutil.neighborJoin(newcorr, geneset.corrInd, null, true, true); } /* * int[] rr = table.getSelectedRows(); for( int r : rr ) { int * cr = table.convertRowIndexToModel(r); Gene gg = * genelist.get(cr); if( gg.species != null ) { textarea.append( * gg.name + ":\n" ); for( String sp : gg.species.keySet() ) { * Teginfo stv = gg.species.get( sp ); for( Tegeval tv : * stv.tset ) { textarea.append( ">" + tv.cont + " " + tv.teg + * " " + tv.eval + "\n" ); for( int i = 0; i < tv.seq.length(); * i+=70 ) { int end = Math.min(i+70,tv.seq.length()); * textarea.append( tv.seq.substring(i, end)+"\n" ); //new * String( tv.seq, i, Math.min(i+70,tv.seq.length()) )+"\n"); } * //textarea.append( ">" + tv.cont + " " + tv.teg + " " + * tv.eval + "\n" + tv.seq + "\n" ); } } } } */ JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true); }); /* * final List<String> reglist = new ArrayList<String>(); final * Map<String,Gene> regidx = new TreeMap<String,Gene>(); * * for( Gene g : geneset.genelist ) { if( g.species != null ) { for( String key * : g.species.keySet() ) { Set<Tegeval> stv = g.species.get(key); for( * Tegeval tv : stv ) { regidx.put(tv.cont, g); } } } } * * for( String key : regidx.keySet() ) { reglist.add(key); } * * final JTable contigtable = new JTable(); * contigtable.setAutoCreateRowSorter( true ); contigtable.setModel( new * TableModel() { * * @Override public int getRowCount() { return reglist.size(); } * * @Override public int getColumnCount() { return 1; } * * @Override public String getColumnName(int columnIndex) { return * "Region"; } * * @Override public Class<?> getColumnClass(int columnIndex) { return * String.class; } * * @Override public boolean isCellEditable(int rowIndex, int * columnIndex) { return false; } * * @Override public Object getValueAt(int rowIndex, int columnIndex) { * return reglist.get(rowIndex); } * * @Override public void setValueAt(Object aValue, int rowIndex, int * columnIndex) { // TODO Auto-generated method stub * * } * * @Override public void addTableModelListener(TableModelListener l) { * // TODO Auto-generated method stub * * } * * @Override public void removeTableModelListener(TableModelListener l) * { // TODO Auto-generated method stub * * } }); * * contigtable.getSelectionModel().addListSelectionListener( new * ListSelectionListener() { * * @Override public void valueChanged(ListSelectionEvent e) { * genefilterset.clear(); int[] rr = contigtable.getSelectedRows(); for( * int r : rr ) { String s = (String)contigtable.getValueAt(r, 0); Gene * g = regidx.get( s ); * * genefilterset.add( g.index ); updateFilter(table, genefilter, label); * //int k = table.convertRowIndexToView(g.index); //if( k != -1 * )table.addRowSelectionInterval(k, k); } } }); JScrollPane * contigscroll = new JScrollPane( contigtable ); * * JSplitPane mainsplit = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT ); * mainsplit.setLeftComponent( contigscroll ); * mainsplit.setRightComponent( splitpane ); */ }