public Collection<GeneralMessage> check(Feature feature) throws SanityRuleException { Collection<GeneralMessage> messages = new ArrayList<GeneralMessage>(); if(feature.getRanges().isEmpty()){ messages.add(new GeneralMessage( MessageDefinition.FEATURE_WITHOUT_RANGE, feature)); } return messages; } }
public Collection<GeneralMessage> check( Feature feature ) throws SanityRuleException { Collection<GeneralMessage> messages = new ArrayList<GeneralMessage>(); if ( feature.getCvFeatureType() == null ) { return messages; } String cvFeatureTypeIdentityMi = feature.getCvFeatureType().getMiIdentifier(); if ( CvFeatureType.MUTATION_DECREASING_MI_REF.equals( cvFeatureTypeIdentityMi ) || CvFeatureType.MUTATION_INCREASING_MI_REF.equals( cvFeatureTypeIdentityMi ) || CvFeatureType.MUTATION_MI_REF.equals( cvFeatureTypeIdentityMi ) || CvFeatureType.MUTATION_DISRUPTING_MI_REF.equals( cvFeatureTypeIdentityMi ) ) { Collection<Range> ranges = feature.getRanges(); for ( Range range : ranges ) { // tointervalstart - r.fromintervalend int width = range.getToIntervalStart() - range.getFromIntervalEnd(); if ( width > 2 ) { messages.add( new GeneralMessage(MessageDefinition.FEATURE_DELETION_FEATURE_TOO_LONG, feature ) ); } } } return messages; } }
/** * @param protein : the protein to check * @return a set of the protein feature ranges which are overlapping or out of bound */ public static Set<Range> getBadRanges(Protein protein) { Collection<Component> components = protein.getActiveInstances(); Set<Range> badRanges = new HashSet<Range>(); for (Component component : components) { Collection<Feature> features = component.getFeatures(); for (Feature feature : features) { Collection<Range> ranges = feature.getRanges(); for (Range range : ranges) { if (isABadRange(range, protein.getSequence())) { badRanges.add(range); } } } } return badRanges; }
/** * @param protein : the protein to check * @return a set of the protein features containing bad ranges (overlapping or out of bound) */ public static Set<Feature> getFeaturesWithBadRanges(Protein protein) { Collection<Component> components = protein.getActiveInstances(); Set<Feature> badFeatures = new HashSet<Feature>(); for (Component component : components) { Collection<Feature> features = component.getBindingDomains(); for (Feature feature : features) { Collection<Range> ranges = feature.getRanges(); for (Range range : ranges) { if (isABadRange(range, protein.getSequence())) { badFeatures.add(feature); break; } } } } return badFeatures; }
/** * @param protein : the protein to check * @return a set of the protein feature ranges which are overlapping or out of bound */ public static Set<Range> getBadRanges(Protein protein) { Collection<Component> components = protein.getActiveInstances(); Set<Range> badRanges = new HashSet<Range>(); for (Component component : components) { Collection<Feature> features = component.getFeatures(); for (Feature feature : features) { Collection<Range> ranges = feature.getRanges(); for (Range range : ranges) { if (isABadRange(range, protein.getSequence())) { badRanges.add(range); } } } } return badRanges; }
/** * Retrieves the ranges from a feature, initializing them if necessary. * * @param feature the feature * @return The returned ranges are ensured to be initialized * @since 2.4.0 */ public static Collection<Range> ensureInitializedRanges(Feature feature) { Collection<Range> ranges; if (IntactCore.isInitialized(feature.getRanges())) { ranges = feature.getRanges(); } else { ranges = IntactContext.getCurrentInstance().getDaoFactory().getRangeDao().getByFeatureAc(feature.getAc()); } return ranges; }
/** * @param protein : the protein to check * @return a set of the protein features containing bad ranges (overlapping or out of bound) */ public static Set<Feature> getFeaturesWithBadRanges(Protein protein) { Collection<Component> components = protein.getActiveInstances(); Set<Feature> badFeatures = new HashSet<Feature>(); for (Component component : components) { Collection<Feature> features = component.getBindingDomains(); for (Feature feature : features) { Collection<Range> ranges = feature.getRanges(); for (Range range : ranges) { if (isABadRange(range, protein.getSequence())) { badFeatures.add(feature); break; } } } } return badFeatures; }
/** * Retrieves the ranges from a feature, initializing them if necessary. * * @param feature the feature * @return The returned ranges are ensured to be initialized * @since 2.4.0 */ public static Collection<Range> ensureInitializedRanges(Feature feature) { Collection<Range> ranges; if (IntactCore.isInitialized(feature.getRanges())) { ranges = feature.getRanges(); } else { ranges = IntactContext.getCurrentInstance().getDaoFactory().getRangeDao().getByFeatureAc(feature.getAc()); } return ranges; }
private void synchronizeFeature( Feature feature, boolean synchronizeAnnotatedAttributes ) { feature.setBoundDomain( synchronize( feature.getBoundDomain() ) ); feature.setComponent( synchronize( feature.getComponent() ) ); feature.setCvFeatureIdentification( synchronize( feature.getCvFeatureIdentification() ) ); feature.setCvFeatureType( synchronize( feature.getCvFeatureType() ) ); // cannot call setRanges in interaction because of orphan relationship limitation if (IntactCore.isInitializedAndDirty(feature.getRanges())){ Collection<Range> ranges = synchronizeRanges(feature.getRanges(), feature); feature.getRanges().clear(); feature.getRanges().addAll(ranges); } if (synchronizeAnnotatedAttributes){ synchronizeAnnotatedObjectCommons( feature ); } }
private void synchronizeFeature( Feature feature, boolean synchronizeAnnotatedAttributes ) { feature.setBoundDomain( synchronize( feature.getBoundDomain() ) ); feature.setComponent( synchronize( feature.getComponent() ) ); feature.setCvFeatureIdentification( synchronize( feature.getCvFeatureIdentification() ) ); feature.setCvFeatureType( synchronize( feature.getCvFeatureType() ) ); // cannot call setRanges in interaction because of orphan relationship limitation if (IntactCore.isInitializedAndDirty(feature.getRanges())){ Collection<Range> ranges = synchronizeRanges(feature.getRanges(), feature); feature.getRanges().clear(); feature.getRanges().addAll(ranges); } if (synchronizeAnnotatedAttributes){ synchronizeAnnotatedObjectCommons( feature ); } }
protected void traverseFeature(Feature feature, IntactVisitor ... visitors) { if (feature == null) return; for (IntactVisitor visitor : visitors) { visitor.visitFeature(feature); } // check if this element has been traversed already, to avoid cyclic recursion if (recursionChecker.isAlreadyTraversed(feature)) { return; } traverse(feature.getCvFeatureType(), visitors); traverse(feature.getCvFeatureIdentification(), visitors); for (Range range : feature.getRanges()) { traverse(range, visitors); } }
protected void traverseFeature(Feature feature, IntactVisitor ... visitors) { if (feature == null) return; for (IntactVisitor visitor : visitors) { visitor.visitFeature(feature); } // check if this element has been traversed already, to avoid cyclic recursion if (recursionChecker.isAlreadyTraversed(feature)) { return; } traverse(feature.getCvFeatureType(), visitors); traverse(feature.getCvFeatureIdentification(), visitors); for (Range range : feature.getRanges()) { traverse(range, visitors); } }
protected UniquenessStringBuilder createUniquenessString(Feature feature) { if (keyExists(feature)) { UniquenessStringBuilder builder = getKey(feature); if (builder != null){ return builder; } else{ identityToCrc.remove(System.identityHashCode(feature)); } } UniquenessStringBuilder sb = new UniquenessStringBuilder(); putKey(feature, sb); if (feature == null) return sb; // short label // We need to add the short label for the feature because in mutations in the same amino acid is the only way to // distinguish between two features when the AC is not assigned yet. sb.append(feature.getShortLabel()); // feature type sb.append(createUniquenessString(feature.getCvFeatureType())); // feature identification sb.append(createUniquenessString(feature.getCvFeatureIdentification())); // ranges List<Range> ranges = new ArrayList<Range>(feature.getRanges()); Collections.sort(ranges, new RangeComparator()); for (Range range : ranges) { sb.append(createUniquenessString(range)); } return sb; }
protected UniquenessStringBuilder createUniquenessString(Feature feature) { if (keyExists(feature)) { UniquenessStringBuilder builder = getKey(feature); if (builder != null){ return builder; } else{ identityToCrc.remove(System.identityHashCode(feature)); } } UniquenessStringBuilder sb = new UniquenessStringBuilder(); putKey(feature, sb); if (feature == null) return sb; // short label // We need to add the short label for the feature because in mutations in the same amino acid is the only way to // distinguish between two features when the AC is not assigned yet. sb.append(feature.getShortLabel()); // feature type sb.append(createUniquenessString(feature.getCvFeatureType())); // feature identification sb.append(createUniquenessString(feature.getCvFeatureIdentification())); // ranges List<Range> ranges = new ArrayList<Range>(feature.getRanges()); Collections.sort(ranges, new RangeComparator()); for (Range range : ranges) { sb.append(createUniquenessString(range)); } return sb; }
@Override protected void saveOrUpdateAttributes(Feature intactObject) throws PersisterException { super.saveOrUpdateAttributes(intactObject); ComponentPersister.getInstance().saveOrUpdate(intactObject.getComponent()); CvObjectPersister cvObjectPersister = CvObjectPersister.getInstance(); if (intactObject.getCvFeatureIdentification() != null) { cvObjectPersister.saveOrUpdate(intactObject.getCvFeatureIdentification()); } if (intactObject.getCvFeatureType() != null) { cvObjectPersister.saveOrUpdate(intactObject.getCvFeatureType()); } for (Range range : intactObject.getRanges()) { if ( range.getFromCvFuzzyType() != null ) { cvObjectPersister.saveOrUpdate(range.getFromCvFuzzyType()); } if ( range.getToCvFuzzyType() != null ) { cvObjectPersister.saveOrUpdate(range.getToCvFuzzyType()); } } }
public Feature cloneFeature(Feature feature) throws IntactClonerException { if (feature == null) return null; Feature clone = new Feature(); clonerManager.addClone(feature, clone); clone.setOwner(clone(feature.getOwner())); clone.setShortLabel(feature.getShortLabel()); clone.setCvFeatureType(clone(feature.getCvFeatureType())); clone.setCvFeatureIdentification(clone(feature.getCvFeatureIdentification())); if (isCollectionClonable(feature.getRanges())) { Collection<Range> ranges = IntactCore.ensureInitializedRanges(feature); for (Range range : ranges) { clone.addRange(clone(range)); } } clone.setComponent(clone(feature.getComponent())); return clone; }
public Feature cloneFeature(Feature feature) throws IntactClonerException { if (feature == null) return null; Feature clone = new Feature(); clonerManager.addClone(feature, clone); clone.setOwner(clone(feature.getOwner())); clone.setShortLabel(feature.getShortLabel()); clone.setCvFeatureType(clone(feature.getCvFeatureType())); clone.setCvFeatureIdentification(clone(feature.getCvFeatureIdentification())); if (isCollectionClonable(feature.getRanges())) { Collection<Range> ranges = IntactCore.ensureInitializedRanges(feature); for (Range range : ranges) { clone.addRange(clone(range)); } } clone.setComponent(clone(feature.getComponent())); return clone; }
for (Range range : intactObject.getRanges()) { if ( range.getFromCvFuzzyType() != null ) { CvFuzzyType synchedFromFuzzyType = (CvFuzzyType) cvObjectPersister.syncIfTransient(range.getFromCvFuzzyType());