001/*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019 */
020package org.sonar.batch.index;
021
022import org.sonar.api.batch.Event;
023import org.sonar.api.database.model.Snapshot;
024import org.sonar.api.design.Dependency;
025import org.sonar.api.measures.Measure;
026import org.sonar.api.resources.Project;
027import org.sonar.api.resources.ProjectLink;
028import org.sonar.api.resources.Resource;
029import org.sonar.api.resources.ResourceUtils;
030
031import java.util.List;
032
033public final class DefaultPersistenceManager implements PersistenceManager {
034
035  private ResourcePersister resourcePersister;
036  private SourcePersister sourcePersister;
037  private MeasurePersister measurePersister;
038  private DependencyPersister dependencyPersister;
039  private LinkPersister linkPersister;
040  private EventPersister eventPersister;
041
042  public DefaultPersistenceManager(ResourcePersister resourcePersister, SourcePersister sourcePersister,
043                                   MeasurePersister measurePersister, DependencyPersister dependencyPersister,
044                                   LinkPersister linkPersister, EventPersister eventPersister) {
045    this.resourcePersister = resourcePersister;
046    this.sourcePersister = sourcePersister;
047    this.measurePersister = measurePersister;
048    this.dependencyPersister = dependencyPersister;
049    this.linkPersister = linkPersister;
050    this.eventPersister = eventPersister;
051  }
052
053  public void clear() {
054    resourcePersister.clear();
055    sourcePersister.clear();
056  }
057
058  public void setDelayedMode(boolean b) {
059    measurePersister.setDelayedMode(b);
060  }
061
062  public void dump() {
063    measurePersister.dump();
064  }
065
066  public void saveProject(Project project, Project parent) {
067    resourcePersister.saveProject(project, parent);
068  }
069
070  public Snapshot saveResource(Project project, Resource resource, Resource parent) {
071    if (ResourceUtils.isPersistable(resource)) {
072      return resourcePersister.saveResource(project, resource, parent);
073    }
074    return null;
075  }
076
077  public void setSource(Resource file, String source) {
078    sourcePersister.saveSource(file, source);
079  }
080
081  public String getSource(Resource resource) {
082    return sourcePersister.getSource(resource);
083  }
084
085  public void saveMeasure(Resource resource, Measure measure) {
086    if (ResourceUtils.isPersistable(resource)) {
087      measurePersister.saveMeasure(resource, measure);
088    }
089  }
090
091  public Measure reloadMeasure(Measure measure) {
092    return measurePersister.reloadMeasure(measure);
093  }
094
095  public void saveDependency(Project project, Dependency dependency, Dependency parentDependency) {
096    if (ResourceUtils.isPersistable(dependency.getFrom()) && ResourceUtils.isPersistable(dependency.getTo())) {
097      dependencyPersister.saveDependency(project, dependency, parentDependency);
098    }
099  }
100
101  public void saveLink(Project project, ProjectLink link) {
102    linkPersister.saveLink(project, link);
103  }
104
105  public void deleteLink(Project project, String key) {
106    linkPersister.deleteLink(project, key);
107  }
108
109  public List<Event> getEvents(Resource resource) {
110    return eventPersister.getEvents(resource);
111  }
112
113  public void deleteEvent(Event event) {
114    eventPersister.deleteEvent(event);
115  }
116
117  public void saveEvent(Resource resource, Event event) {
118    if (ResourceUtils.isPersistable(resource)) {
119      eventPersister.saveEvent(resource, event);
120    }
121  }
122}