Skip to content

Commit

Permalink
Crearte statement from batch edit
Browse files Browse the repository at this point in the history
  • Loading branch information
bastiensaquet committed Jan 2, 2017
1 parent 5091e47 commit eecdeda
Show file tree
Hide file tree
Showing 292 changed files with 329 additions and 44,204 deletions.
1 change: 0 additions & 1 deletion .gitignore
Expand Up @@ -162,7 +162,6 @@ pip-log.txt
# Mac crap # Mac crap
.DS_Store .DS_Store
/YOUR JREBEL LICENSE HAS EXPIRED!.error /YOUR JREBEL LICENSE HAS EXPIRED!.error
digilib-config.xml
items-out.xml items-out.xml


# jRebel # jRebel
Expand Down
27 changes: 0 additions & 27 deletions pom.xml
Expand Up @@ -429,33 +429,6 @@
<artifactId>im4java</artifactId> <artifactId>im4java</artifactId>
<version>1.2.0</version> <version>1.2.0</version>
</dependency> </dependency>
<!-- START: Digilib integration -->
<dependency>
<groupId>digilib</groupId>
<artifactId>digilib-servlet2</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>digilib</groupId>
<artifactId>digilib-common</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>digilib</groupId>
<artifactId>digilib-servlet</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.devlib.schmidt</groupId>
<artifactId>imageinfo</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.0</version>
</dependency>
<!-- END: Digilib integration -->
<dependency> <dependency>
<groupId>org.apache.tika</groupId> <groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId> <artifactId>tika-parsers</artifactId>
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/de/mpg/imeji/logic/ImejiInitializer.java
Expand Up @@ -61,11 +61,15 @@ public class ImejiInitializer {
* @throws ImejiException * @throws ImejiException
* *
*/ */
public static void init() throws IOException, URISyntaxException, ImejiException { public static void init() {
Imeji.tdbPath = PropertyReader.getProperty("imeji.tdb.path"); try {
ElasticInitializer.start(); Imeji.tdbPath = PropertyReader.getProperty("imeji.tdb.path");
ImejiInitializer.init(Imeji.tdbPath); ElasticInitializer.start();
Imeji.getNIGHTLY_EXECUTOR().start(); ImejiInitializer.init(Imeji.tdbPath);
Imeji.getNIGHTLY_EXECUTOR().start();
} catch (Exception e) {
LOGGER.fatal("Error initializing imeji", e);
}
} }




Expand Down
12 changes: 0 additions & 12 deletions src/main/java/de/mpg/imeji/logic/config/ImejiProperties.java
Expand Up @@ -17,10 +17,6 @@
* *
*/ */
public class ImejiProperties { public class ImejiProperties {
/**
* True if Digilib is enabled
*/
private boolean digilibEnabled = false;
/** /**
* The base of the path to the internal storage * The base of the path to the internal storage
*/ */
Expand All @@ -46,7 +42,6 @@ public ImejiProperties() {
public void load() { public void load() {
try { try {
PropertyReader.loadProperties(); PropertyReader.loadProperties();
digilibEnabled = Boolean.parseBoolean(getProperty("imeji.digilib.enable"));
internalStorageBase = FilenameUtils internalStorageBase = FilenameUtils
.getBaseName(FilenameUtils.normalizeNoEndSeparator(getProperty("imeji.storage.path"))); .getBaseName(FilenameUtils.normalizeNoEndSeparator(getProperty("imeji.storage.path")));
applicationURL = StringHelper.normalizeURI(getProperty("imeji.instance.url")); applicationURL = StringHelper.normalizeURI(getProperty("imeji.instance.url"));
Expand Down Expand Up @@ -90,13 +85,6 @@ private void readBaseUri() {
ObjectHelper.baseUri = baseURI; ObjectHelper.baseUri = baseURI;
} }


/**
* @return the digilibEnabled
*/
public boolean isDigilibEnabled() {
return digilibEnabled;
}

/** /**
* @return the internalStorageBase * @return the internalStorageBase
* @throws URISyntaxException * @throws URISyntaxException
Expand Down
Expand Up @@ -24,6 +24,7 @@
import de.mpg.imeji.exceptions.UnprocessableError; import de.mpg.imeji.exceptions.UnprocessableError;
import de.mpg.imeji.j2j.helper.J2JHelper; import de.mpg.imeji.j2j.helper.J2JHelper;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.reader.ReaderFacade; import de.mpg.imeji.logic.reader.ReaderFacade;
import de.mpg.imeji.logic.search.Search; import de.mpg.imeji.logic.search.Search;
import de.mpg.imeji.logic.search.Search.SearchObjectTypes; import de.mpg.imeji.logic.search.Search.SearchObjectTypes;
Expand All @@ -40,7 +41,6 @@
import de.mpg.imeji.logic.search.model.SortCriterion; import de.mpg.imeji.logic.search.model.SortCriterion;
import de.mpg.imeji.logic.security.util.SecurityUtil; import de.mpg.imeji.logic.security.util.SecurityUtil;
import de.mpg.imeji.logic.service.ImejiServiceAbstract; import de.mpg.imeji.logic.service.ImejiServiceAbstract;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.vo.Album; import de.mpg.imeji.logic.vo.Album;
import de.mpg.imeji.logic.vo.Item; import de.mpg.imeji.logic.vo.Item;
import de.mpg.imeji.logic.vo.Properties.Status; import de.mpg.imeji.logic.vo.Properties.Status;
Expand Down
Expand Up @@ -23,6 +23,7 @@
import de.mpg.imeji.exceptions.UnprocessableError; import de.mpg.imeji.exceptions.UnprocessableError;
import de.mpg.imeji.j2j.helper.J2JHelper; import de.mpg.imeji.j2j.helper.J2JHelper;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.reader.ReaderFacade; import de.mpg.imeji.logic.reader.ReaderFacade;
import de.mpg.imeji.logic.search.Search; import de.mpg.imeji.logic.search.Search;
import de.mpg.imeji.logic.search.Search.SearchObjectTypes; import de.mpg.imeji.logic.search.Search.SearchObjectTypes;
Expand All @@ -38,7 +39,6 @@
import de.mpg.imeji.logic.search.model.SortCriterion; import de.mpg.imeji.logic.search.model.SortCriterion;
import de.mpg.imeji.logic.security.util.SecurityUtil; import de.mpg.imeji.logic.security.util.SecurityUtil;
import de.mpg.imeji.logic.service.ImejiServiceAbstract; import de.mpg.imeji.logic.service.ImejiServiceAbstract;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.validation.impl.CollectionValidator; import de.mpg.imeji.logic.validation.impl.CollectionValidator;
import de.mpg.imeji.logic.validation.impl.Validator.Method; import de.mpg.imeji.logic.validation.impl.Validator.Method;
import de.mpg.imeji.logic.vo.CollectionImeji; import de.mpg.imeji.logic.vo.CollectionImeji;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/de/mpg/imeji/logic/export/ExportManager.java
Expand Up @@ -16,10 +16,10 @@
import de.mpg.imeji.logic.controller.resource.AlbumController; import de.mpg.imeji.logic.controller.resource.AlbumController;
import de.mpg.imeji.logic.controller.resource.CollectionController; import de.mpg.imeji.logic.controller.resource.CollectionController;
import de.mpg.imeji.logic.export.format.Export; import de.mpg.imeji.logic.export.format.Export;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.search.SearchQueryParser; import de.mpg.imeji.logic.search.SearchQueryParser;
import de.mpg.imeji.logic.search.model.SearchQuery; import de.mpg.imeji.logic.search.model.SearchQuery;
import de.mpg.imeji.logic.search.model.SearchResult; import de.mpg.imeji.logic.search.model.SearchResult;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.util.ObjectHelper; import de.mpg.imeji.logic.util.ObjectHelper;
import de.mpg.imeji.logic.vo.Album; import de.mpg.imeji.logic.vo.Album;
import de.mpg.imeji.logic.vo.CollectionImeji; import de.mpg.imeji.logic.vo.CollectionImeji;
Expand Down
Expand Up @@ -41,8 +41,8 @@


import de.mpg.imeji.exceptions.ImejiException; import de.mpg.imeji.exceptions.ImejiException;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.search.model.SearchResult; import de.mpg.imeji.logic.search.model.SearchResult;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.storage.StorageController; import de.mpg.imeji.logic.storage.StorageController;
import de.mpg.imeji.logic.vo.Item; import de.mpg.imeji.logic.vo.Item;
import de.mpg.imeji.logic.vo.User; import de.mpg.imeji.logic.vo.User;
Expand Down
@@ -1,4 +1,4 @@
package de.mpg.imeji.logic.controller.resource; package de.mpg.imeji.logic.item;


import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
Expand All @@ -15,7 +15,6 @@
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.reader.ReaderFacade; import de.mpg.imeji.logic.reader.ReaderFacade;
import de.mpg.imeji.logic.service.ImejiServiceAbstract; import de.mpg.imeji.logic.service.ImejiServiceAbstract;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.storage.Storage; import de.mpg.imeji.logic.storage.Storage;
import de.mpg.imeji.logic.util.LicenseUtil; import de.mpg.imeji.logic.util.LicenseUtil;
import de.mpg.imeji.logic.vo.CollectionImeji; import de.mpg.imeji.logic.vo.CollectionImeji;
Expand All @@ -35,8 +34,13 @@
*/ */
public class ItemController extends ImejiServiceAbstract { public class ItemController extends ImejiServiceAbstract {
private static final Logger LOGGER = Logger.getLogger(ItemService.class); private static final Logger LOGGER = Logger.getLogger(ItemService.class);
private static final ReaderFacade READER = new ReaderFacade(Imeji.imageModel); private final ReaderFacade READER;
private static final WriterFacade WRITER = new WriterFacade(Imeji.imageModel); private final WriterFacade WRITER;

public ItemController() {
READER = new ReaderFacade(Imeji.imageModel);
WRITER = new WriterFacade(Imeji.imageModel);
}


/** /**
* Create a {@link List} of {@link Item} in a {@link CollectionImeji}. This method is faster than * Create a {@link List} of {@link Item} in a {@link CollectionImeji}. This method is faster than
Expand Down
@@ -1,7 +1,7 @@
/** /**
* License: src/main/resources/license/escidoc.license * License: src/main/resources/license/escidoc.license
*/ */
package de.mpg.imeji.logic.service.item; package de.mpg.imeji.logic.item;


import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.base.Strings.isNullOrEmpty;


Expand All @@ -26,7 +26,6 @@
import de.mpg.imeji.exceptions.UnprocessableError; import de.mpg.imeji.exceptions.UnprocessableError;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.controller.resource.ContentController; import de.mpg.imeji.logic.controller.resource.ContentController;
import de.mpg.imeji.logic.controller.resource.ItemController;
import de.mpg.imeji.logic.search.Search; import de.mpg.imeji.logic.search.Search;
import de.mpg.imeji.logic.search.Search.SearchObjectTypes; import de.mpg.imeji.logic.search.Search.SearchObjectTypes;
import de.mpg.imeji.logic.search.elasticsearch.ElasticIndexer; import de.mpg.imeji.logic.search.elasticsearch.ElasticIndexer;
Expand Down Expand Up @@ -785,5 +784,4 @@ public List<Item> retrieveAll() throws ImejiException {
LOGGER.info(uris.size() + " items found, retrieving..."); LOGGER.info(uris.size() + " items found, retrieving...");
return (List<Item>) retrieveBatch(uris, -1, 0, Imeji.adminUser); return (List<Item>) retrieveBatch(uris, -1, 0, Imeji.adminUser);
} }

} }
Expand Up @@ -9,11 +9,11 @@
import de.mpg.imeji.logic.controller.resource.CollectionController; import de.mpg.imeji.logic.controller.resource.CollectionController;
import de.mpg.imeji.logic.controller.resource.ContentController; import de.mpg.imeji.logic.controller.resource.ContentController;
import de.mpg.imeji.logic.controller.resource.SpaceController; import de.mpg.imeji.logic.controller.resource.SpaceController;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.search.elasticsearch.ElasticIndexer; import de.mpg.imeji.logic.search.elasticsearch.ElasticIndexer;
import de.mpg.imeji.logic.search.elasticsearch.ElasticInitializer; import de.mpg.imeji.logic.search.elasticsearch.ElasticInitializer;
import de.mpg.imeji.logic.search.elasticsearch.ElasticService; import de.mpg.imeji.logic.search.elasticsearch.ElasticService;
import de.mpg.imeji.logic.search.elasticsearch.ElasticService.ElasticTypes; import de.mpg.imeji.logic.search.elasticsearch.ElasticService.ElasticTypes;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.user.controller.GroupBusinessController; import de.mpg.imeji.logic.user.controller.GroupBusinessController;
import de.mpg.imeji.logic.user.controller.UserBusinessController; import de.mpg.imeji.logic.user.controller.UserBusinessController;
import de.mpg.imeji.logic.vo.Album; import de.mpg.imeji.logic.vo.Album;
Expand Down
Expand Up @@ -4,7 +4,7 @@


import org.apache.log4j.Logger; import org.apache.log4j.Logger;


import de.mpg.imeji.logic.service.item.ItemService; import de.mpg.imeji.logic.item.ItemService;


/** /**
* Job to extract fulltext and technical metadata for all files * Job to extract fulltext and technical metadata for all files
Expand Down
Expand Up @@ -9,7 +9,7 @@
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;


import de.mpg.imeji.logic.service.item.ItemService; import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.storage.StorageController; import de.mpg.imeji.logic.storage.StorageController;
import de.mpg.imeji.logic.storage.UploadResult; import de.mpg.imeji.logic.storage.UploadResult;
import de.mpg.imeji.logic.util.ObjectHelper; import de.mpg.imeji.logic.util.ObjectHelper;
Expand Down
Expand Up @@ -9,9 +9,9 @@


import de.mpg.imeji.exceptions.ImejiException; import de.mpg.imeji.exceptions.ImejiException;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.search.jenasearch.ImejiSPARQL; import de.mpg.imeji.logic.search.jenasearch.ImejiSPARQL;
import de.mpg.imeji.logic.search.jenasearch.JenaCustomQueries; import de.mpg.imeji.logic.search.jenasearch.JenaCustomQueries;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.storage.internal.InternalStorageManager; import de.mpg.imeji.logic.storage.internal.InternalStorageManager;
import de.mpg.imeji.logic.storage.util.ImageUtils; import de.mpg.imeji.logic.storage.util.ImageUtils;
import de.mpg.imeji.logic.vo.Item; import de.mpg.imeji.logic.vo.Item;
Expand Down
@@ -1,4 +1,4 @@
package de.mpg.imeji.logic.service.statement; package de.mpg.imeji.logic.statement;


import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
Expand Down
@@ -1,4 +1,4 @@
package de.mpg.imeji.logic.service.statement; package de.mpg.imeji.logic.statement;


import java.util.List; import java.util.List;


Expand Down Expand Up @@ -39,6 +39,18 @@ public Statement create(Statement statement, User user) throws ImejiException {
return controller.create(statement, user); return controller.create(statement, user);
} }


/**
* Create a list of {@link Statement}
*
* @param statement
* @param user
* @return
* @throws ImejiException
*/
public List<Statement> createBatch(List<Statement> l, User user) throws ImejiException {
return controller.createBatch(l, user);
}

/** /**
* Retrieve a {@link Statement} * Retrieve a {@link Statement}
* *
Expand Down Expand Up @@ -101,7 +113,8 @@ public List<Statement> retrieve(List<String> ids, User user) throws ImejiExcepti


@Override @Override
public List<Statement> retrieveAll() throws ImejiException { public List<Statement> retrieveAll() throws ImejiException {
List<String> uris = ImejiSPARQL.exec(JenaCustomQueries.selectItemAll(), Imeji.statementModel); List<String> uris =
ImejiSPARQL.exec(JenaCustomQueries.selectStatementAll(), Imeji.statementModel);
return (List<Statement>) retrieveBatch(uris, Imeji.adminUser); return (List<Statement>) retrieveBatch(uris, Imeji.adminUser);
} }
} }
Expand Up @@ -161,8 +161,7 @@ public void removeFile(String url) {
if (f.exists()) { if (f.exists()) {
boolean deleted = FileUtils.deleteQuietly(f); boolean deleted = FileUtils.deleteQuietly(f);
if (!deleted) { if (!deleted) {
throw new RuntimeException( throw new RuntimeException("Impossible to delete the existing file.");
"Impossible to delete the existing file. Please close all Digilib pages and try later.");
} }
} }
} }
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/de/mpg/imeji/logic/vo/Statement.java
Expand Up @@ -33,11 +33,12 @@
public class Statement implements Serializable, Cloneable { public class Statement implements Serializable, Cloneable {
private static final long serialVersionUID = -7950561563075491540L; private static final long serialVersionUID = -7950561563075491540L;
private String id; private String id;
private StatementType type = StatementType.TEXT;
private URI uri; private URI uri;
@j2jLiteral("http://imeji.org/terms/index") @j2jLiteral("http://imeji.org/terms/index")
private String index; private String index;
@j2jLiteral("http://purl.org/dc/terms/type") @j2jLiteral("http://purl.org/dc/terms/type")
private StatementType type = StatementType.TEXT; private String typeString = type.name();
@j2jList("http://purl.org/dc/terms/name") @j2jList("http://purl.org/dc/terms/name")
private List<String> names = new ArrayList<>(); private List<String> names = new ArrayList<>();
@j2jResource("http://purl.org/dc/dcam/VocabularyEncodingScheme") @j2jResource("http://purl.org/dc/dcam/VocabularyEncodingScheme")
Expand All @@ -51,11 +52,13 @@ public Statement() {
} }


public StatementType getType() { public StatementType getType() {
type = StatementType.valueOf(typeString);
return type; return type;
} }


public void setType(StatementType type) { public void setType(StatementType type) {
this.type = type; this.type = type;
this.typeString = type.name();
} }


/** /**
Expand Down Expand Up @@ -154,8 +157,6 @@ public Statement clone() {
return clone; return clone;
} }




/** /**
* Comparator to sort String ignoring the case * Comparator to sort String ignoring the case
* *
Expand Down
1 change: 0 additions & 1 deletion src/main/java/de/mpg/imeji/logic/vo/StatementType.java
Expand Up @@ -8,5 +8,4 @@
*/ */
public enum StatementType { public enum StatementType {
TEXT, NUMBER, GEOLOCATION, DATE, PERSON, URL; TEXT, NUMBER, GEOLOCATION, DATE, PERSON, URL;

} }
Expand Up @@ -19,7 +19,7 @@
import de.mpg.imeji.exceptions.ImejiException; import de.mpg.imeji.exceptions.ImejiException;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.controller.resource.AlbumController; import de.mpg.imeji.logic.controller.resource.AlbumController;
import de.mpg.imeji.logic.service.item.ItemService; import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.user.controller.UserBusinessController; import de.mpg.imeji.logic.user.controller.UserBusinessController;
import de.mpg.imeji.logic.util.ObjectHelper; import de.mpg.imeji.logic.util.ObjectHelper;
import de.mpg.imeji.logic.util.UrlHelper; import de.mpg.imeji.logic.util.UrlHelper;
Expand Down
Expand Up @@ -16,10 +16,10 @@
import de.mpg.imeji.exceptions.ImejiException; import de.mpg.imeji.exceptions.ImejiException;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.controller.resource.AlbumController; import de.mpg.imeji.logic.controller.resource.AlbumController;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.search.model.SearchQuery; import de.mpg.imeji.logic.search.model.SearchQuery;
import de.mpg.imeji.logic.search.model.SearchResult; import de.mpg.imeji.logic.search.model.SearchResult;
import de.mpg.imeji.logic.search.model.SortCriterion; import de.mpg.imeji.logic.search.model.SortCriterion;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.util.ObjectHelper; import de.mpg.imeji.logic.util.ObjectHelper;
import de.mpg.imeji.logic.util.UrlHelper; import de.mpg.imeji.logic.util.UrlHelper;
import de.mpg.imeji.logic.vo.Album; import de.mpg.imeji.logic.vo.Album;
Expand Down
Expand Up @@ -35,8 +35,8 @@
import de.mpg.imeji.exceptions.UnprocessableError; import de.mpg.imeji.exceptions.UnprocessableError;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.doi.DoiService; import de.mpg.imeji.logic.doi.DoiService;
import de.mpg.imeji.logic.item.ItemService;
import de.mpg.imeji.logic.search.model.SearchIndex.SearchFields; import de.mpg.imeji.logic.search.model.SearchIndex.SearchFields;
import de.mpg.imeji.logic.service.item.ItemService;
import de.mpg.imeji.logic.search.model.SearchOperators; import de.mpg.imeji.logic.search.model.SearchOperators;
import de.mpg.imeji.logic.search.model.SearchPair; import de.mpg.imeji.logic.search.model.SearchPair;
import de.mpg.imeji.logic.search.model.SearchQuery; import de.mpg.imeji.logic.search.model.SearchQuery;
Expand Down
Expand Up @@ -14,7 +14,7 @@


import de.mpg.imeji.exceptions.ImejiException; import de.mpg.imeji.exceptions.ImejiException;
import de.mpg.imeji.logic.Imeji; import de.mpg.imeji.logic.Imeji;
import de.mpg.imeji.logic.service.statement.StatementService; import de.mpg.imeji.logic.statement.StatementService;
import de.mpg.imeji.logic.vo.Item; import de.mpg.imeji.logic.vo.Item;
import de.mpg.imeji.logic.vo.Statement; import de.mpg.imeji.logic.vo.Statement;


Expand Down

0 comments on commit eecdeda

Please sign in to comment.