/* * Copyright 2015 JBoss, by Red Hat, Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.uberfire.ext.wires.bpmn.api.model.impl.rules; import java.util.HashSet; import java.util.Set; import org.jboss.errai.common.client.api.annotations.MapsTo; import org.jboss.errai.common.client.api.annotations.Portable; import org.uberfire.commons.validation.PortablePreconditions; import org.uberfire.ext.wires.bpmn.api.model.Role; import org.uberfire.ext.wires.bpmn.api.model.rules.CardinalityRule; @Portable public class CardinalityRuleImpl implements CardinalityRule { private String name; private Role role; private long minOccurrences = 0; private long maxOccurrences = 0; private Set<ConnectorRule> incomingConnectionRules = new HashSet<ConnectorRule>(); private Set<ConnectorRule> outgoingConnectionRules = new HashSet<ConnectorRule>(); public CardinalityRuleImpl(@MapsTo("name") final String name, @MapsTo("role") Role role, @MapsTo("minOccurrences") long minOccurrences, @MapsTo("maxOccurrences") long maxOccurrences, @MapsTo("incomingConnectionRules") Set<ConnectorRule> incomingConnectionRules, @MapsTo("outgoingConnectionRules") Set<ConnectorRule> outgoingConnectionRules) { this.name = PortablePreconditions.checkNotNull("name", name); this.role = PortablePreconditions.checkNotNull("role", role); if (minOccurrences < 0) { throw new IllegalArgumentException("minOccurrences cannot be less than 0."); } this.minOccurrences = minOccurrences; if (maxOccurrences < minOccurrences) { throw new IllegalArgumentException("maxOccurrences cannot be less than minOccurrences."); } this.maxOccurrences = maxOccurrences; for (ConnectorRule cr : incomingConnectionRules) { final long crMinOccurrences = cr.getMinOccurrences(); final long crMaxOccurrences = cr.getMaxOccurrences(); if (crMinOccurrences < 0) { throw new IllegalArgumentException("Incoming ConnectorRule minOccurrences cannot be less than 0."); } if (crMaxOccurrences < crMinOccurrences) { throw new IllegalArgumentException("Incoming ConnectorRule maxOccurrences cannot be less than minOccurrences."); } } this.incomingConnectionRules = PortablePreconditions.checkNotNull("incomingConnectionRules", incomingConnectionRules); for (ConnectorRule cr : outgoingConnectionRules) { final long crMinOccurrences = cr.getMinOccurrences(); final long crMaxOccurrences = cr.getMaxOccurrences(); if (crMinOccurrences < 0) { throw new IllegalArgumentException("Outgoing ConnectorRule minOccurrences cannot be less than 0."); } if (crMaxOccurrences < crMinOccurrences) { throw new IllegalArgumentException("Outgoing ConnectorRule maxOccurrences cannot be less than minOccurrences."); } } this.outgoingConnectionRules = PortablePreconditions.checkNotNull("outgoingConnectionRules", outgoingConnectionRules); } @Override public String getName() { return name; } @Override public Role getRole() { return role; } @Override public long getMinOccurrences() { return minOccurrences; } @Override public long getMaxOccurrences() { return maxOccurrences; } @Override public Set<ConnectorRule> getIncomingConnectionRules() { return incomingConnectionRules; } @Override public Set<ConnectorRule> getOutgoingConnectionRules() { return outgoingConnectionRules; } }