Skip to content

Commit

Permalink
Merge pull request #439 from dickschoeller/342-repository-manager-mongo
Browse files Browse the repository at this point in the history
Fixes #342 - RepositoryManagerMongo too many fields
  • Loading branch information
dickschoeller authored Jun 18, 2017
2 parents 20f7429 + ce30895 commit 6b98e4d
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public <T extends GedObject> T find(final FinderObject owner,
throw new IllegalArgumentException("Owner must be root");
}
final FindableDocument<? extends GedObject, ? extends GedDocument<?>>
repo = repositoryManager.getRepoMap().get(clazz);
repo = repositoryManager.get(clazz);
if (repo == null) {
return null;
}
Expand Down Expand Up @@ -224,7 +224,7 @@ public <T extends GedObject> Collection<T> find(final FinderObject owner,
throw new IllegalArgumentException("Owner must be root");
}
final FindableDocument<? extends GedObject, ? extends GedDocument<?>>
repo = repositoryManager.getRepoMap().get(clazz);
repo = repositoryManager.get(clazz);
if (repo == null) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.schoellerfamily.gedbrowser.datamodel.GedObject;
import org.schoellerfamily.gedbrowser.datamodel.Head;
import org.schoellerfamily.gedbrowser.datamodel.Person;
import org.schoellerfamily.gedbrowser.datamodel.Root;
import org.schoellerfamily.gedbrowser.datamodel.Source;
import org.schoellerfamily.gedbrowser.datamodel.Submittor;
import org.schoellerfamily.gedbrowser.datamodel.Trailer;
Expand All @@ -18,118 +19,159 @@
* @author Dick Schoeller
*/
public class RepositoryManagerMongo {
/** */
@Autowired
private transient RootDocumentRepositoryMongo rootDocumentRepository;

/** */
@Autowired
private transient PersonDocumentRepositoryMongo personDocumentRepository;

/** */
@Autowired
private transient FamilyDocumentRepositoryMongo familyDocumentRepository;

/** */
@Autowired
private transient SourceDocumentRepositoryMongo sourceDocumentRepository;

/** */
@Autowired
private transient HeadDocumentRepositoryMongo headDocumentRepository;

/** */
@Autowired
private transient SubmittorDocumentRepositoryMongo
submittorDocumentRepository;
/**
* This map manages the relationship between GedObject classes and
* repositories.
*/
private final Map<Class<? extends GedObject>, Object>
classToRepoMap = new HashMap<>();

/** */
/**
* @param repository
* the repository
*/
@Autowired
private transient TrailerDocumentRepositoryMongo trailerDocumentRepository;
public void setRootDocumentRepository(
final RootDocumentRepositoryMongo repository) {
classToRepoMap.put(Root.class, repository);
}

/**
* @return the repository
*/
public final RootDocumentRepositoryMongo getRootDocumentRepository() {
return rootDocumentRepository;
return (RootDocumentRepositoryMongo) classToRepoMap.get(Root.class);
}

/**
* @param repository
* the repository
*/
@Autowired
public void setPersonDocumentRepository(
final PersonDocumentRepositoryMongo repository) {
classToRepoMap.put(Person.class, repository);
}

/**
* @return the repository
*/
public final PersonDocumentRepositoryMongo getPersonDocumentRepository() {
return personDocumentRepository;
return (PersonDocumentRepositoryMongo) classToRepoMap.get(Person.class);
}

/**
* @param repository
* the repository
*/
@Autowired
public void setFamilyDocumentRepository(
final FamilyDocumentRepositoryMongo repository) {
classToRepoMap.put(Family.class, repository);
}

/**
* @return the repository
*/
public final FamilyDocumentRepositoryMongo getFamilyDocumentRepository() {
return familyDocumentRepository;
return (FamilyDocumentRepositoryMongo) classToRepoMap.get(Family.class);
}

/**
* @param repository
* the repository
*/
@Autowired
public void setSourceDocumentRepository(
final SourceDocumentRepositoryMongo repository) {
classToRepoMap.put(Source.class, repository);
}

/**
* @return the repository
*/
public final SourceDocumentRepositoryMongo getSourceDocumentRepository() {
return sourceDocumentRepository;
return (SourceDocumentRepositoryMongo) classToRepoMap.get(Source.class);
}

/**
* @param repository
* the repository
*/
@Autowired
public void setHeadDocumentRepository(
final HeadDocumentRepositoryMongo repository) {
classToRepoMap.put(Head.class, repository);
}

/**
* @return the repository
*/
public final HeadDocumentRepositoryMongo getHeadDocumentRepository() {
return headDocumentRepository;
return (HeadDocumentRepositoryMongo) classToRepoMap.get(Head.class);
}

/**
* @param repository
* the repository
*/
@Autowired
public void setSubmittorDocumentRepository(
final SubmittorDocumentRepositoryMongo repository) {
classToRepoMap.put(Submittor.class, repository);
}

/**
* @return the repository
*/
public final SubmittorDocumentRepositoryMongo
getSubmittorDocumentRepository() {
return submittorDocumentRepository;
return (SubmittorDocumentRepositoryMongo) classToRepoMap
.get(Submittor.class);
}

/**
* @param repository
* the repository
*/
@Autowired
public void setTrailerDocumentRepository(
final TrailerDocumentRepositoryMongo repository) {
classToRepoMap.put(Trailer.class, repository);
}

/**
* @return the repository
*/
public final TrailerDocumentRepositoryMongo getTrailerDocumentRepository() {
return trailerDocumentRepository;
return (TrailerDocumentRepositoryMongo) classToRepoMap
.get(Trailer.class);
}

/**
* Get the map that we need to go from class to repository.
* Get a repository based on the class of ged object we are working with.
*
* @return the map
*/
public final Map<Class<? extends GedObject>,
FindableDocument<? extends GedObject,
? extends GedDocument<?>>> getRepoMap() {
/**
* Holds the connections between ged classes and repositories.
*/
final Map<Class<? extends GedObject>,
FindableDocument<? extends GedObject,
? extends GedDocument<?>>> repoMap = new HashMap<>();
repoMap.put(Family.class, familyDocumentRepository);
repoMap.put(Head.class, headDocumentRepository);
repoMap.put(Person.class, personDocumentRepository);
repoMap.put(Source.class, sourceDocumentRepository);
repoMap.put(Submittor.class, submittorDocumentRepository);
repoMap.put(Trailer.class, trailerDocumentRepository);
return repoMap;
* @param clazz
* the class of ged object
* @return the repository
*/
@SuppressWarnings("unchecked")
public final FindableDocument<? extends GedObject, ? extends GedDocument<?>>
get(final Class<? extends GedObject> clazz) {
return (FindableDocument<? extends GedObject, ? extends GedDocument<?>>)
classToRepoMap .get(clazz);
}

/**
* Clear all of the repositories in the dataset.
*/
public void reset() {
rootDocumentRepository.deleteAll();
personDocumentRepository.deleteAll();
familyDocumentRepository.deleteAll();
sourceDocumentRepository.deleteAll();
headDocumentRepository.deleteAll();
submittorDocumentRepository.deleteAll();
trailerDocumentRepository.deleteAll();
getRootDocumentRepository().deleteAll();
getPersonDocumentRepository().deleteAll();
getFamilyDocumentRepository().deleteAll();
getSourceDocumentRepository().deleteAll();
getHeadDocumentRepository().deleteAll();
getSubmittorDocumentRepository().deleteAll();
getTrailerDocumentRepository().deleteAll();
}
}

0 comments on commit 6b98e4d

Please sign in to comment.