@Override public NegotiationDescriptor clone() { NegotiationDescriptor clone = new NegotiationDescriptor(); clone.setTarget(getTarget()); clone.setAppend(isAppend()); List<NegotiatorDescriptor> negotiators = this.negotiators; if (negotiators != null) { List<NegotiatorDescriptor> cnegociators = new ArrayList<NegotiatorDescriptor>(); for (NegotiatorDescriptor neg : negotiators) { cnegociators.add(neg.clone()); } clone.setNegotiators(cnegociators); } return clone; }
@Override public NegotiationDescriptor clone(NegotiationDescriptor orig) { if (orig == null) { return null; } return orig.clone(); }
@Override public void merge(NegotiationDescriptor src, NegotiationDescriptor dst) { dst.merge(src); }
public void merge(NegotiationDescriptor src) { List<NegotiatorDescriptor> negotiators = src.negotiators; if (negotiators != null) { List<NegotiatorDescriptor> merged = new ArrayList<NegotiatorDescriptor>(); merged.addAll(negotiators); boolean keepOld = src.isAppend() || (negotiators.isEmpty() && !src.isAppend()); if (keepOld) { // add back old contributions List<NegotiatorDescriptor> oldNegotiators = this.negotiators; if (oldNegotiators != null) { merged.addAll(0, oldNegotiators); } } setNegotiators(merged); } }
@Override public String getContributionId(NegotiationDescriptor contrib) { return contrib.getTarget(); }
@Override public String negotiate(String target, Object context) { String res = null; NegotiationDescriptor negd = negReg.getNegotiation(target); if (negd != null) { List<NegotiatorDescriptor> nds = negd.getNegotiators(); for (NegotiatorDescriptor nd : nds) { Class<Negotiator> ndc = nd.getNegotiatorClass(); try { Negotiator neg = ndc.newInstance(); neg.setProperties(nd.getProperties()); res = neg.getResult(target, context); if (res != null) { break; } } catch (IllegalAccessException | InstantiationException e) { throw new RuntimeException(e); } } } return res; }
} else if (contribution instanceof NegotiationDescriptor) { NegotiationDescriptor neg = (NegotiationDescriptor) contribution; log.info(String.format("Register negotiation for '%s'", neg.getTarget())); negReg.addContribution(neg); log.info(String.format("Done registering negotiation for '%s'", neg.getTarget())); } else { log.error(String.format(