Skip to content
Snippets Groups Projects
Commit 401d1a1e authored by pkupczyk's avatar pkupczyk
Browse files

SSDM-3543 : V3 AS API - improve context information in exceptions - not finished yet

SVN: 36529
parent f85f4cab
No related branches found
No related tags found
No related merge requests found
Showing
with 186 additions and 68 deletions
......@@ -63,7 +63,8 @@ public class Context implements IContext
public void pushProgress(IProgress progress)
{
progressStack.push(progress);
notifyProgressListeners();
// temporarily comment out until SSDM-3543 is finished
// notifyProgressListeners();
}
@Override
......
......@@ -26,6 +26,8 @@ public interface IProgress extends Serializable
String getLabel();
String getDetails();
Integer getTotalItemsToProcess();
Integer getNumItemsProcessed();
......
/*
* Copyright 2016 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.ethz.sis.openbis.generic.server.asapi.v3.context;
/**
* @author pkupczyk
*/
public abstract class LazyLoadedProgress implements IProgress
{
private static final long serialVersionUID = 1L;
private IProgress loadedProgress;
protected abstract IProgress load();
@Override
public String getLabel()
{
return getLoadedProgress().getLabel();
}
@Override
public String getDetails()
{
return getLoadedProgress().getDetails();
}
@Override
public Integer getTotalItemsToProcess()
{
return getLoadedProgress().getTotalItemsToProcess();
}
@Override
public Integer getNumItemsProcessed()
{
return getLoadedProgress().getNumItemsProcessed();
}
@Override
public String toString()
{
return getLoadedProgress().toString();
}
private IProgress getLoadedProgress()
{
if (loadedProgress == null)
{
loadedProgress = load();
}
return loadedProgress;
}
}
......@@ -26,20 +26,23 @@ public class Progress implements IProgress
private String label;
private Integer totalItemsToProcess;
private String details;
private Integer numItemsProcessed;
private Integer totalItemsToProcess;
public Progress(String label)
{
this.label = label;
}
public Progress(String label, int totalItemsToProcess, int numItemsProcessed)
public Progress(String label, String details, int numItemsProcessed, int totalItemsToProcess)
{
this.label = label;
this.totalItemsToProcess = totalItemsToProcess;
this.details = details;
this.numItemsProcessed = numItemsProcessed;
this.totalItemsToProcess = totalItemsToProcess;
}
@Override
......@@ -48,6 +51,12 @@ public class Progress implements IProgress
return label;
}
@Override
public String getDetails()
{
return details;
}
@Override
public Integer getTotalItemsToProcess()
{
......@@ -63,13 +72,22 @@ public class Progress implements IProgress
@Override
public String toString()
{
StringBuilder result = new StringBuilder();
if (getTotalItemsToProcess() == null && getNumItemsProcessed() == null)
{
return getLabel();
result.append(getLabel());
} else
{
return getLabel() + " (" + getNumItemsProcessed() + "/" + getTotalItemsToProcess() + ")";
result.append(getLabel() + " (" + getNumItemsProcessed() + "/" + getTotalItemsToProcess() + ")");
}
if (getDetails() != null)
{
result.append(" [" + getDetails() + "]");
}
return result.toString();
}
}
......@@ -36,11 +36,16 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.id.ITagId;
import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.ObjectNotFoundException;
import ch.ethz.sis.openbis.generic.asapi.v3.exceptions.UnauthorizedObjectAccessException;
import ch.ethz.sis.openbis.generic.server.asapi.v3.context.IProgress;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractCreateEntityExecutor;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.IMapEntityTypeByIdExecutor;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.property.IUpdateEntityPropertyExecutor;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.tag.IAddTagToEntityExecutor;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.CollectionBatch;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.CollectionBatchProcessor;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.entity.progress.CheckDataProgress;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.openbis.generic.server.authorization.validator.DataSetPEByExperimentOrSampleIdentifierValidator;
import ch.systemsx.cisd.openbis.generic.server.business.bo.DataAccessExceptionTranslator;
......@@ -98,28 +103,38 @@ public class CreateDataSetExecutor extends AbstractCreateEntityExecutor<DataSetC
private IVerifyDataSetExecutor verifyDataSetExecutor;
@Override
protected List<DataPE> createEntities(IOperationContext context, Collection<DataSetCreation> creations)
protected List<DataPE> createEntities(final IOperationContext context, CollectionBatch<DataSetCreation> batch)
{
// Get Types
Collection<IEntityTypeId> typeIds = new HashSet<IEntityTypeId>();
for (DataSetCreation creation : creations)
for (DataSetCreation creation : batch.getObjects())
{
typeIds.add(creation.getTypeId());
}
Map<IEntityTypeId, EntityTypePE> types = mapEntityTypeByIdExecutor.map(context, EntityKind.DATA_SET, typeIds);
final Map<IEntityTypeId, EntityTypePE> types = mapEntityTypeByIdExecutor.map(context, EntityKind.DATA_SET, typeIds);
// Validate DataSet creations
for (DataSetCreation creation : creations)
{
checkData(context, creation, types.get(creation.getTypeId()));
}
new CollectionBatchProcessor<DataSetCreation>(context, batch)
{
@Override
public void process(DataSetCreation object)
{
checkData(context, object, types.get(object.getTypeId()));
}
@Override
public IProgress createProgress(DataSetCreation object, int objectIndex, int totalObjectCount)
{
return new CheckDataProgress(object, objectIndex, totalObjectCount);
}
};
IPermIdDAO codeGenerator = daoFactory.getPermIdDAO();
List<DataPE> dataSets = new LinkedList<DataPE>();
for (DataSetCreation creation : creations)
for (DataSetCreation creation : batch.getObjects())
{
DataSetTypePE type = (DataSetTypePE) types.get(creation.getTypeId());
......@@ -206,22 +221,22 @@ public class CreateDataSetExecutor extends AbstractCreateEntityExecutor<DataSetC
}
@Override
protected void checkBusinessRules(IOperationContext context, Collection<DataPE> entities)
protected void checkBusinessRules(IOperationContext context, CollectionBatch<DataPE> batch)
{
verifyDataSetExecutor.verify(context, entities);
verifyDataSetExecutor.verify(context, batch);
}
@Override
protected void updateBatch(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap)
protected void updateBatch(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch)
{
setDataSetPhysicalDataExecutor.set(context, entitiesMap);
setDataSetLinkedDataExecutor.set(context, entitiesMap);
setDataSetDataStoreExecutor.set(context, entitiesMap);
setDataSetSampleExecutor.set(context, entitiesMap);
setDataSetExperimentExecutor.set(context, entitiesMap);
setDataSetPhysicalDataExecutor.set(context, batch);
setDataSetLinkedDataExecutor.set(context, batch);
setDataSetDataStoreExecutor.set(context, batch);
setDataSetSampleExecutor.set(context, batch);
setDataSetExperimentExecutor.set(context, batch);
Map<IEntityPropertiesHolder, Map<String, String>> propertyMap = new HashMap<IEntityPropertiesHolder, Map<String, String>>();
for (Map.Entry<DataSetCreation, DataPE> entry : entitiesMap.entrySet())
for (Map.Entry<DataSetCreation, DataPE> entry : batch.getObjects().entrySet())
{
propertyMap.put(entry.getValue(), entry.getKey().getProperties());
}
......@@ -229,11 +244,11 @@ public class CreateDataSetExecutor extends AbstractCreateEntityExecutor<DataSetC
}
@Override
protected void updateAll(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap)
protected void updateAll(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch)
{
Map<IEntityWithMetaprojects, Collection<? extends ITagId>> tagMap = new HashMap<IEntityWithMetaprojects, Collection<? extends ITagId>>();
for (Map.Entry<DataSetCreation, DataPE> entry : entitiesMap.entrySet())
for (Map.Entry<DataSetCreation, DataPE> entry : batch.getObjects().entrySet())
{
DataSetCreation creation = entry.getKey();
DataPE entity = entry.getValue();
......@@ -241,7 +256,7 @@ public class CreateDataSetExecutor extends AbstractCreateEntityExecutor<DataSetC
}
addTagToEntityExecutor.add(context, tagMap);
setDataSetRelatedDataSetsExecutor.set(context, entitiesMap);
setDataSetRelatedDataSetsExecutor.set(context, batch);
}
@Override
......
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetDataStoreExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetExternalDmsExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetFileFormatTypeExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetLinkedDataExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetLocatorTypeExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetPhysicalDataExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface ISetDataSetStorageFormatExecutor
{
void set(IOperationContext context, Map<DataSetCreation, DataPE> entitiesMap);
void set(IOperationContext context, MapBatch<DataSetCreation, DataPE> batch);
}
......@@ -16,10 +16,9 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Map;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.update.DataSetUpdate;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.MapBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -28,6 +27,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface IUpdateDataSetRelatedDataSetsExecutor
{
public void update(IOperationContext context, Map<DataSetUpdate, DataPE> entitiesMap);
public void update(IOperationContext context, MapBatch<DataSetUpdate, DataPE> batch);
}
......@@ -16,9 +16,8 @@
package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.dataset;
import java.util.Collection;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.CollectionBatch;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
/**
......@@ -27,6 +26,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
public interface IVerifyDataSetExecutor
{
public void verify(IOperationContext context, Collection<DataPE> entities);
public void verify(IOperationContext context, CollectionBatch<DataPE> entities);
}
......@@ -22,7 +22,6 @@ import org.springframework.stereotype.Component;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.IDataSetId;
import ch.ethz.sis.openbis.generic.server.asapi.v3.context.Progress;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractSetEntityToManyRelationExecutor;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
......@@ -35,6 +34,12 @@ public class SetDataSetChildrenExecutor extends AbstractSetEntityToManyRelationE
ISetDataSetChildrenExecutor
{
@Override
protected String getRelationName()
{
return "dataset-children";
}
@Override
protected Collection<? extends IDataSetId> getRelatedIds(IOperationContext context, DataSetCreation creation)
{
......@@ -44,14 +49,10 @@ public class SetDataSetChildrenExecutor extends AbstractSetEntityToManyRelationE
@Override
protected void setRelated(IOperationContext context, DataPE parent, Collection<DataPE> children)
{
context.pushProgress(new Progress("set children for dataset " + parent.getCode()));
for (DataPE child : children)
{
relationshipService.addParentToDataSet(context.getSession(), child, parent);
}
context.popProgress();
}
}
......@@ -22,7 +22,6 @@ import org.springframework.stereotype.Component;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.IDataSetId;
import ch.ethz.sis.openbis.generic.server.asapi.v3.context.Progress;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractSetEntityToManyRelationExecutor;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
......@@ -36,6 +35,12 @@ public class SetDataSetComponentsExecutor extends AbstractSetEntityToManyRelatio
ISetDataSetComponentsExecutor
{
@Override
protected String getRelationName()
{
return "dataset-components";
}
@Override
protected Collection<? extends IDataSetId> getRelatedIds(IOperationContext context, DataSetCreation creation)
{
......@@ -45,8 +50,6 @@ public class SetDataSetComponentsExecutor extends AbstractSetEntityToManyRelatio
@Override
protected void setRelated(IOperationContext context, DataPE container, Collection<DataPE> components)
{
context.pushProgress(new Progress("set components for dataset " + container.getCode()));
if (false == components.isEmpty())
{
if (false == container.isContainer())
......@@ -60,8 +63,6 @@ public class SetDataSetComponentsExecutor extends AbstractSetEntityToManyRelatio
relationshipService.assignDataSetToContainer(context.getSession(), component, container);
}
}
context.popProgress();
}
}
......@@ -22,7 +22,6 @@ import org.springframework.stereotype.Component;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.create.DataSetCreation;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.IDataSetId;
import ch.ethz.sis.openbis.generic.server.asapi.v3.context.Progress;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.entity.AbstractSetEntityToManyRelationExecutor;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
......@@ -36,6 +35,12 @@ public class SetDataSetContainerExecutor extends AbstractSetEntityToManyRelation
ISetDataSetContainerExecutor
{
@Override
protected String getRelationName()
{
return "dataset-containers";
}
@Override
protected Collection<? extends IDataSetId> getRelatedIds(IOperationContext context, DataSetCreation creation)
{
......@@ -45,8 +50,6 @@ public class SetDataSetContainerExecutor extends AbstractSetEntityToManyRelation
@Override
protected void setRelated(IOperationContext context, DataPE component, Collection<DataPE> containers)
{
context.pushProgress(new Progress("set containers for dataset " + component.getCode()));
for (DataPE container : containers)
{
if (false == container.isContainer())
......@@ -56,8 +59,6 @@ public class SetDataSetContainerExecutor extends AbstractSetEntityToManyRelation
}
relationshipService.assignDataSetToContainer(context.getSession(), component, container);
}
context.popProgress();
}
}
......@@ -39,6 +39,12 @@ public class SetDataSetDataStoreExecutor extends AbstractSetEntityToOneRelationE
implements ISetDataSetDataStoreExecutor
{
@Override
protected String getRelationName()
{
return "dataset-datastore";
}
@Autowired
private IMapDataStoreByIdExecutor mapDataStoreByIdExecutor;
......
......@@ -41,6 +41,12 @@ public class SetDataSetExperimentExecutor extends AbstractSetEntityExperimentRel
@Autowired
private IDAOFactory daoFactory;
@Override
protected String getRelationName()
{
return "dataset-experiment";
}
@Override
protected IExperimentId getRelatedId(DataSetCreation creation)
{
......
......@@ -44,6 +44,12 @@ public class SetDataSetExternalDmsExecutor extends
@Autowired
private IMapExternalDmsByIdExecutor mapExternalDmsByIdExecutor;
@Override
protected String getRelationName()
{
return "dataset-externaldms";
}
@Override
protected IExternalDmsId getRelatedId(DataSetCreation creation)
{
......
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