package ecologylab.bigsemantics.metametadata; import ecologylab.bigsemantics.metadata.Metadata; import ecologylab.serialization.ElementState; import ecologylab.serialization.annotations.simpl_inherit; import ecologylab.serialization.annotations.simpl_scalar; import ecologylab.serialization.types.element.IMappable; @simpl_inherit public class LinkWith extends ElementState implements IMappable<String> { @simpl_scalar private String name; @simpl_scalar private String byId; private boolean reverse = false; private LinkWith reverseLink; public String getName() { return name; } public String getById() { return byId; } public boolean isReverse() { return reverse; } public void setReverse(boolean reverse) { this.reverse = reverse; } public LinkWith getReverseLink() { return reverseLink; } public void setReverseLink(LinkWith lw) { reverseLink = lw; lw.reverseLink = this; } public LinkWith createReverseLink(String sourceMetaMetadataName) { LinkWith lw = new LinkWith(); lw.name = sourceMetaMetadataName; lw.byId = byId; lw.reverse = true; reverseLink = lw; lw.reverseLink = this; return lw; } @Override public String key() { return name; } public boolean tryLink(Metadata parsedMetadata, Metadata toMetadata) { String value = parsedMetadata.getNaturalIdValue(byId); String baseValue = toMetadata.getNaturalIdValue(byId); if (value != null && baseValue != null && value.equals(baseValue)) { toMetadata.addLinkedMetadata(this, parsedMetadata); parsedMetadata.addLinkedMetadata(getReverseLink(), toMetadata); return true; } return false; } }