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 */
020 package org.sonar.batch.index;
021
022 import org.sonar.api.database.DatabaseSession;
023 import org.sonar.api.database.model.Snapshot;
024 import org.sonar.api.design.Dependency;
025 import org.sonar.api.design.DependencyDto;
026 import org.sonar.api.resources.Project;
027
028 public final class DependencyPersister {
029
030 private ResourcePersister resourcePersister;
031 private DatabaseSession session;
032
033 public DependencyPersister(ResourcePersister resourcePersister, DatabaseSession session) {
034 this.resourcePersister = resourcePersister;
035 this.session = session;
036 }
037
038 public void saveDependency(Project project, Dependency dependency, Dependency parentDependency) {
039 Snapshot fromSnapshot = resourcePersister.saveResource(project, dependency.getFrom());
040 Snapshot toSnapshot = resourcePersister.saveResource(project, dependency.getTo());
041 Snapshot projectSnapshot = resourcePersister.getSnapshot(project);
042
043 DependencyDto model = new DependencyDto();
044 model.setProjectSnapshotId(projectSnapshot.getId());
045 model.setUsage(dependency.getUsage());
046 model.setWeight(dependency.getWeight());
047
048 model.setFromResourceId(fromSnapshot.getResourceId());
049 model.setFromScope(fromSnapshot.getScope());
050 model.setFromSnapshotId(fromSnapshot.getId());
051
052 model.setToResourceId(toSnapshot.getResourceId());
053 model.setToSnapshotId(toSnapshot.getId());
054 model.setToScope(toSnapshot.getScope());
055
056 if (parentDependency != null) {
057 // assume that it has been previously saved
058 model.setParentDependencyId(parentDependency.getId());
059 }
060 session.save(model);
061 dependency.setId(model.getId());
062 }
063 }