/* * RHQ Management Platform * Copyright (C) 2011 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.core.pc.drift; import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE; import java.io.File; import java.io.IOException; import org.rhq.common.drift.ChangeSetReader; import org.rhq.common.drift.ChangeSetReaderImpl; import org.rhq.common.drift.ChangeSetWriter; import org.rhq.common.drift.ChangeSetWriterImpl; import org.rhq.common.drift.Headers; import org.rhq.core.domain.drift.DriftChangeSetCategory; public class ChangeSetManagerImpl implements ChangeSetManager { private File changeSetsDir; public ChangeSetManagerImpl(File changeSetsDir) { this.changeSetsDir = changeSetsDir; } @Override public boolean changeSetExists(int resourceId, Headers headers) { File changeSetDir = findChangeSetDir(resourceId, headers.getDriftDefinitionName()); if (changeSetDir == null || !changeSetDir.exists()) { return false; } return new File(changeSetDir, DriftDetector.FILE_CHANGESET_FULL).exists(); } @Override public File findChangeSet(int resourceId, String driftDefinitionName) throws IOException { File changeSetDir = findChangeSetDir(resourceId, driftDefinitionName); File changeSetFile = new File(changeSetDir, DriftDetector.FILE_CHANGESET_FULL); if (changeSetFile.exists()) { return changeSetFile; } return null; } @Override public File findChangeSet(int resourceId, String name, DriftChangeSetCategory type) { File resourceDir = new File(changeSetsDir, Integer.toString(resourceId)); File changeSetDir = new File(resourceDir, name); if (!changeSetDir.exists()) { changeSetDir.mkdirs(); } switch (type) { case COVERAGE: return new File(changeSetDir, DriftDetector.FILE_CHANGESET_FULL); case DRIFT: return new File(changeSetDir, DriftDetector.FILE_CHANGESET_DELTA); default: throw new IllegalArgumentException(type + " is not a recognized, supported change set type."); } } @Override public ChangeSetReader getChangeSetReader(int resourceId, String driftDefinitionName) throws IOException { File changeSetFile = findChangeSet(resourceId, driftDefinitionName); if (changeSetFile == null) { return null; } return new ChangeSetReaderImpl(changeSetFile); } @Override public ChangeSetReader getChangeSetReader(File changeSetFile) throws IOException { return new ChangeSetReaderImpl(changeSetFile); } @Override public ChangeSetWriter getChangeSetWriter(int resourceId, Headers headers) throws IOException { File resourceDir = new File(changeSetsDir, Integer.toString(resourceId)); File changeSetDir = new File(resourceDir, headers.getDriftDefinitionName()); if (!changeSetDir.exists()) { changeSetDir.mkdirs(); } File changeSet; if (headers.getType() == COVERAGE) { changeSet = new File(changeSetDir, DriftDetector.FILE_CHANGESET_FULL); } else { changeSet = new File(changeSetDir, DriftDetector.FILE_CHANGESET_DELTA); } return new ChangeSetWriterImpl(changeSet, headers); } @Override public ChangeSetWriter getChangeSetWriter(File changeSetFile, Headers headers) throws IOException { return new ChangeSetWriterImpl(changeSetFile, headers); } private File findChangeSetDir(int resourceId, String driftDefinitionName) { File resourceDir = new File(changeSetsDir, Integer.toString(resourceId)); if (!resourceDir.exists()) { return null; } return new File(resourceDir, driftDefinitionName); } }