package io.cattle.platform.lock.definition;
import org.apache.commons.lang3.StringUtils;
public abstract class AbstractMultiLockDefinition implements MultiLockDefinition {
LockDefinition[] lockDefinitions;
String[] ids;
public AbstractMultiLockDefinition(LockDefinition... lockDefinitions) {
super();
this.lockDefinitions = lockDefinitions;
this.ids = new String[lockDefinitions.length];
for (int i = 0; i < lockDefinitions.length; i++) {
if (lockDefinitions[i] instanceof MultiLockDefinition) {
throw new IllegalArgumentException("Can not nest multi locks");
}
this.ids[i] = lockDefinitions[i].getLockId();
}
}
public AbstractMultiLockDefinition(String... ids) {
this(getLockDefinitions(ids));
}
@Override
public String getLockId() {
return StringUtils.join(ids, ",");
}
@Override
public LockDefinition[] getLockDefinitions() {
return lockDefinitions;
}
private static final LockDefinition[] getLockDefinitions(String... ids) {
LockDefinition[] result = new LockDefinition[ids.length];
for (int i = 0; i < ids.length; i++) {
result[i] = new AbstractLockDefinition.DefaultLockDefinition(ids[i]);
}
return result;
}
}