Skip to content
Snippets Groups Projects
Commit f046a5b8 authored by brinn's avatar brinn
Browse files

[BIS-278/SP-417] Add API entity identifiers.

SVN: 28419
parent 71b0eb3f
No related branches found
No related tags found
No related merge requests found
/*
* Copyright 2010 ETH Zuerich, CISD
*
* 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 ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonIgnore;
import ch.systemsx.cisd.base.annotation.JsonObject;
import ch.systemsx.cisd.common.reflection.ModifiedShortPrefixToStringStyle;
/**
* Unique identifier for an experiment in openBIS.
*
* @author Bernd Rinn
*/
@SuppressWarnings("unused")
@JsonObject("ExperimentIdentifier")
public class ExperimentIdentifier implements IPermanentIdentifier, IDatabaseIdentifier
{
private static final long serialVersionUID = 1L;
private Long databaseId;
private String permId;
private String spaceCode;
private String projectCode;
private String code;
/**
* Creates an {@link ExperimentIdentifier} from the given <var>augmentedCode</code>.
*
* @param augmentedCode The <var>augmentedCode</code> in the form
* <code>/SPACE/PROJECT/EXPERIMENT</code>
* @return An experiment identifer corresponding to <var>augmentedCode</code>. Note that this
* experiment identifier has no perm id or database id set.
* @throws IllegalArgumentException If the <var>augmentedCode</code> is not in the form
* <code>/SPACE/PROJECT/EXPERIMENT</code>.
*/
public static ExperimentIdentifier createFromAugmentedCode(String augmentedCode)
throws IllegalArgumentException
{
final String[] splitted = augmentedCode.split("/");
if (splitted.length != 4 || splitted[0].length() != 0)
{
throw new IllegalArgumentException("Augmented code '" + augmentedCode
+ "' needs to be either of the form '/SPACE/PROJECT/EXPERIMENT' "
+ "or 'PROJECT/EXPERIMENT'.");
}
if (StringUtils.isBlank(splitted[3]))
{
throw new IllegalArgumentException("No code given.");
}
if (StringUtils.isBlank(splitted[2]))
{
throw new IllegalArgumentException("No project code given.");
}
if (StringUtils.isBlank(splitted[1]))
{
throw new IllegalArgumentException("No space code given.");
}
return new ExperimentIdentifier(null, null, splitted[3], splitted[2], splitted[1]);
}
/**
* Creates an {@link ExperimentIdentifier} from the given <var>permId</code>.
*
* @param permId The <var>permId</code>
* @return An experiment identifier corresponding to <var>permId</code>. Note that this
* experiment identifier has no code, project or space information.
*/
public static ExperimentIdentifier createFromPermId(String permId)
throws IllegalArgumentException
{
if (StringUtils.isBlank(permId))
{
throw new IllegalArgumentException("No perm id given.");
}
return new ExperimentIdentifier(null, permId, null, null, null);
}
/**
* Creates an {@link ExperimentIdentifier} from the given <var>entity</code>.
*
* @param entity The entity as received from one of the other methods.
* @return An experiment identifier corresponding to <var>entity</code>. Note that this
* experiment identifier has no permid, code, project or space information.
*/
public static ExperimentIdentifier createFromEntity(Experiment entity)
{
return new ExperimentIdentifier(entity.getId(), null, null, null, null);
}
/**
* A <code>spaceCode == null</code> is interpreted as the home space.
*/
private ExperimentIdentifier(Long databaseId, String permId, String code,
String projectCode, String spaceCode)
{
this.databaseId = databaseId;
this.permId = permId;
this.spaceCode = spaceCode;
this.projectCode = projectCode;
this.code = code;
}
@Override
public Long getDatabaseId()
{
return databaseId;
}
@Override
public String getPermId()
{
return permId;
}
/**
* The code of the space of this experiment.
*/
public String getSpaceCode()
{
return spaceCode;
}
/**
* The code of the project of this experiment.
*/
public String getProjectCode()
{
return projectCode;
}
/**
* The experiment code.
*/
public String getCode()
{
return code;
}
/**
* Returns the augmented (full) code of this experiment.
*/
@JsonIgnore
public String getAugmentedCode()
{
if (code == null)
{
return null;
}
return "/" + spaceCode + "/" + projectCode + "/" + code;
}
//
// JSON-RPC
//
private ExperimentIdentifier()
{
}
private void setSpaceCode(String spaceCode)
{
this.spaceCode = spaceCode;
}
private void setProjectCode(String projectCode)
{
this.projectCode = projectCode;
}
private void setcode(String code)
{
this.code = code;
}
private void setPermId(String permId)
{
this.permId = permId;
}
private void setDatabaseId(Long databaseId)
{
this.databaseId = databaseId;
}
@Override
public final boolean equals(final Object obj)
{
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public final int hashCode()
{
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public String toString()
{
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}
/*
* Copyright 2013 ETH Zuerich, CISD
*
* 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 ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
/**
* A database id of an entity.
* <i>
* Note that this is id not meant to be persisted anywhere outside of the database. Use
* {@link IPermanentIdentifier} for that.
*
* @author Bernd Rinn
*/
public interface IDatabaseIdentifier
{
/**
* Returns the database id of the entity.
*/
public Long getDatabaseId();
}
/*
* Copyright 2010 ETH Zuerich, CISD
*
* 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 ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
/**
* A role that represents a permanent identifier in openBIS.
*
* @author Bernd Rinn
*/
public interface IPermanentIdentifier
{
/**
* Returns the permanent identifier.
*/
public String getPermId();
}
\ No newline at end of file
/*
* Copyright 2010 ETH Zuerich, CISD
*
* 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 ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonIgnore;
import ch.systemsx.cisd.base.annotation.JsonObject;
import ch.systemsx.cisd.common.reflection.ModifiedShortPrefixToStringStyle;
/**
* Unique identifier for a project in openBIS.
*
* @author Bernd Rinn
*/
@SuppressWarnings("unused")
@JsonObject("ProjectIdentifier")
public class ProjectIdentifier implements IPermanentIdentifier, IDatabaseIdentifier
{
private static final long serialVersionUID = 1L;
private Long databaseId;
private String permId;
private String spaceCode;
private String code;
/**
* Creates an {@link ProjectIdentifier} from the given <var>augmentedCode</code>.
*
* @param augmentedCode The <var>augmentedCode</code> in the form
* <code>/SPACE/PROJECT</code>.
* @return A sample identifier corresponding to <var>augmentedCode</code>. Note that this
* sample identifier has no perm id set.
* @throws IllegalArgumentException If the <var>augmentedCode</code> is not in the form
* <code>/SPACE/SAMPLE</code> or <code>/SAMPLE</code>.
*/
public static ProjectIdentifier createFromAugmentedCode(String augmentedCode)
throws IllegalArgumentException
{
final String[] splitted = augmentedCode.split("/");
if (splitted.length == 3 && splitted[0].length() == 0)
{
return new ProjectIdentifier(null, null, splitted[2], splitted[1]);
}
throw new IllegalArgumentException("Augmented code '" + augmentedCode
+ "' needs to be of the form '/SPACE/PROJECT'.");
}
/**
* Creates an {@link ProjectIdentifier} from the given <var>permId</code>.
*
* @param permId The <var>permId</code>
* @return An identifier corresponding to <var>permId</code>. Note that this
* identifier has no code, project or space information.
*/
public static ProjectIdentifier createFromPermId(String permId)
throws IllegalArgumentException
{
return new ProjectIdentifier(null, permId, null, null);
}
/**
* Creates an {@link ProjectIdentifier} from the given <var>entity</code>.
*
* @param entity The entity as received from one of the other methods.
* @return An identifier corresponding to <var>entity</code>. Note that this
* identifier has no perm id, code, project or space information.
*/
public static ProjectIdentifier createFromEntity(Project entity)
{
return new ProjectIdentifier(entity.getId(), null, null, null);
}
private ProjectIdentifier(Long databaseId, String permId, String sampleCode,
String spaceCode)
{
this.databaseId = databaseId;
this.permId = permId;
this.spaceCode = spaceCode;
this.code = sampleCode;
}
@Override
public Long getDatabaseId()
{
return databaseId;
}
@Override
public String getPermId()
{
return permId;
}
/**
* The code of the space of this project.
*/
public String getSpaceCode()
{
return spaceCode;
}
public String getCode()
{
return code;
}
/**
* Returns the augmented (full) code of this project.
*/
@JsonIgnore
public String getAugmentedCode()
{
if (code == null)
{
return null;
}
return "/" + spaceCode + "/" + code;
}
//
// JSON-RPC
//
private ProjectIdentifier()
{
}
private void setSpaceCode(String spaceCode)
{
this.spaceCode = spaceCode;
}
private void setCode(String code)
{
this.code = code;
}
private void setPermId(String permId)
{
this.permId = permId;
}
private void setDatabaseId(Long databaseId)
{
this.databaseId = databaseId;
}
@Override
public final boolean equals(final Object obj)
{
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public final int hashCode()
{
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public String toString()
{
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}
/*
* Copyright 2010 ETH Zuerich, CISD
*
* 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 ch.systemsx.cisd.openbis.generic.shared.api.v1.dto;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonIgnore;
import ch.systemsx.cisd.base.annotation.JsonObject;
import ch.systemsx.cisd.common.reflection.ModifiedShortPrefixToStringStyle;
/**
* Unique identifier for a sample in openBIS.
*
* @author Bernd Rinn
*/
@SuppressWarnings("unused")
@JsonObject("SampleIdentifier")
public class SampleIdentifier implements IPermanentIdentifier, IDatabaseIdentifier
{
private static final long serialVersionUID = 1L;
private Long databaseId;
private String permId;
private String spaceCode;
private String code;
/**
* Creates an {@link SampleIdentifier} from the given <var>augmentedCode</code>.
*
* @param augmentedCode The <var>augmentedCode</code> in the form
* <code>/SPACE/SAMPLE</code> or <code>/SAMPLE</code>.
* @return A sample identifier corresponding to <var>augmentedCode</code>. Note that this
* sample identifier has no perm id set.
* @throws IllegalArgumentException If the <var>augmentedCode</code> is not in the form
* <code>/SPACE/SAMPLE</code> or <code>/SAMPLE</code>.
*/
public static SampleIdentifier createFromAugmentedCode(String augmentedCode)
throws IllegalArgumentException
{
final String[] splitted = augmentedCode.split("/");
if (splitted.length == 3 && splitted[0].length() == 0)
{
return new SampleIdentifier(null, null, splitted[2], splitted[1]);
}
if (splitted.length == 2 && splitted[0].length() == 0) // Instance sample
{
return new SampleIdentifier(null, null, splitted[1], null);
}
throw new IllegalArgumentException("Augmented code '" + augmentedCode
+ "' needs to be either of the form '/SPACE/SAMPLE' " + "or '/SAMPLE'.");
}
/**
* Creates an {@link SampleIdentifier} from the given <var>permId</code>.
*
* @param permId The <var>permId</code>
* @return An identifier corresponding to <var>permId</code>. Note that this
* identifier has no code, project or space information.
*/
public static SampleIdentifier createFromPermId(String permId)
throws IllegalArgumentException
{
return new SampleIdentifier(null, permId, null, null);
}
/**
* Creates an {@link SampleIdentifier} from the given <var>entity</code>.
*
* @param entity The entity as received from one of the other methods.
* @return An identifier corresponding to <var>entity</code>. Note that this
* identifier has no permid, code, project or space information.
*/
public static SampleIdentifier createFromEntity(Sample entity)
{
return new SampleIdentifier(entity.getId(), null, null, null);
}
/**
* A <code>spaceCode == null</code> means: instance sample.
*/
private SampleIdentifier(Long databaseId, String permId, String sampleCode,
String spaceCode)
{
this.databaseId = databaseId;
this.permId = permId;
this.spaceCode = spaceCode;
this.code = sampleCode;
}
@Override
public Long getDatabaseId()
{
return databaseId;
}
@Override
public String getPermId()
{
return permId;
}
/**
* The code of the space of this sample.
*/
public String getSpaceCode()
{
return spaceCode;
}
public String getCode()
{
return code;
}
/**
* Returns the augmented (full) code of this sample.
*/
@JsonIgnore
public String getAugmentedCode()
{
if (code == null)
{
return null;
}
if (spaceCode != null)
{
return "/" + spaceCode + "/" + code;
} else
{
return "/" + code;
}
}
//
// JSON-RPC
//
private SampleIdentifier()
{
}
private void setSpaceCode(String spaceCode)
{
this.spaceCode = spaceCode;
}
private void setCode(String code)
{
this.code = code;
}
private void setPermId(String permId)
{
this.permId = permId;
}
private void setDatabaseId(Long databaseId)
{
this.databaseId = databaseId;
}
@Override
public final boolean equals(final Object obj)
{
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public final int hashCode()
{
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public String toString()
{
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment