package com.dbdeploy.scripts; import com.dbdeploy.exceptions.DbDeployException; import java.io.*; public class ChangeScript implements Comparable { private final long id; private final File file; private final String description; private final String encoding; private static final String UNDO_MARKER = "--//@UNDO"; public ChangeScript(long id) { this(id, "test"); } public ChangeScript(long id, String description) { this.id = id; this.file = null; this.description = description; this.encoding = "UTF-8"; } public ChangeScript(long id, File file, String encoding) { this.id = id; this.file = file; this.description = file.getName(); this.encoding = encoding; } public File getFile() { return file; } public long getId() { return id; } public String getDescription() { return description; } public int compareTo(Object o) { ChangeScript other = (ChangeScript) o; return Long.valueOf(this.id).compareTo(other.id); } @Override public String toString() { return "#" + id + ": " + description; } public String getContent() { return getFileContents(false); } public String getUndoContent() { return getFileContents(true); } private String getFileContents(boolean onlyAfterUndoMarker) { try { StringBuilder content = new StringBuilder(); boolean foundUndoMarker = false; BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding)); try { for (;;) { String str = reader.readLine(); if (str == null) break; if (str.trim().equals(UNDO_MARKER)) { foundUndoMarker = true; continue; } if (foundUndoMarker == onlyAfterUndoMarker) { content.append(str); content.append('\n'); } } } finally { reader.close(); } return content.toString(); } catch (IOException e) { throw new DbDeployException("Failed to read change script file", e); } } }