fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major/**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * The contents of this file are subject to the terms
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * of the Common Development and Distribution License
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * (the License). You may not use this file except in
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * compliance with the License.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * You can obtain a copy of the License at
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * https://opensso.dev.java.net/public/CDDLv1.0.html or
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * opensso/legal/CDDLv1.0.txt
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * See the License for the specific language governing
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * permission and limitations under the License.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * When distributing Covered Code, include this CDDL
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Header Notice in each file and include the License file
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * at opensso/legal/CDDLv1.0.txt.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * If applicable, add the following below the CDDL Header,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * with the fields enclosed by brackets [] replaced by
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * your own identifying information:
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * "Portions Copyrighted [year] [name of copyright owner]"
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * $Id: FileEditor.java,v 1.2 2008/06/25 05:51:29 qcheng Exp $
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorpackage com.sun.identity.install.tools.util;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.BufferedWriter;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.File;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.FileInputStream;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.FileOutputStream;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.FileReader;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.IOException;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.InputStreamReader;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.LineNumberReader;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.io.OutputStreamWriter;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.HashMap;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.HashSet;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.Iterator;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.Map;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.Set;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.TreeSet;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major/**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Class that provides functionality to match the "lines" with specified
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * pattern and remove them from the specified file.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorpublic class FileEditor {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public FileEditor(String fileName) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major setFileName(fileName);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major /**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @param matchPatterns
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * a Set of DeletePatterns
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @return true if all the patterns were found and deleted. False if some
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * patterns were not found. In such cases no changes are made to
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * the file.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @throws Exception
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public boolean deleteLines(Set matchPatterns) throws Exception {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major boolean success = false;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Map patternOccurrances = getPatternOccurences(matchPatterns);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (patternOccurrances.size() == matchPatterns.size()) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major TreeSet removeLines = addSuccessiveDeleteLines(matchPatterns,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major patternOccurrances);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major success = deleteLineNumbers(removeLines);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return success;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public boolean deleteLines(DeletePattern pattern) throws Exception {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Set matchPatterns = new HashSet();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major matchPatterns.add(pattern);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Map patternOccurrances = getPatternOccurences(matchPatterns);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major boolean success = false;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (patternOccurrances.size() == 1) { // Just one match should be
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // found
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major TreeSet removeLines = addSuccessiveDeleteLines(matchPatterns,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major patternOccurrances);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major success = deleteLineNumbers(removeLines);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return success;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private TreeSet addSuccessiveDeleteLines(Set matchPatterns,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Map patternOccurrances) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major TreeSet removeLines = new TreeSet(patternOccurrances.values());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Iterator iter = matchPatterns.iterator();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major while (iter.hasNext()) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major DeletePattern dp = (DeletePattern) iter.next();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Integer lineNumber = (Integer) patternOccurrances.get(dp
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major .getPattern());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major int numSuccessiveLines = dp.getNumberOfSuccessiveLines();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major for (int i = 1; i <= numSuccessiveLines; i++) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major removeLines.add(new Integer(lineNumber.intValue() + i));
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return removeLines;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private boolean deleteLineNumbers(TreeSet lineNumbers) throws Exception {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Get the line numbers and sort them using TreeSet
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("FileEditor.deleteLineNumbers() - Lines that "
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major + "will be skipped: " + lineNumbers);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major TreeSet removeLineNumbers = new TreeSet(lineNumbers);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major LineNumberReader reader = null;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major BufferedWriter writer = null;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major try {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major FileInputStream fi = new FileInputStream(getFileName());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major InputStreamReader ir = new InputStreamReader(fi);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major reader = new LineNumberReader(ir);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major reader.setLineNumber(0);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major FileOutputStream fo = new FileOutputStream(getTempFileName());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major OutputStreamWriter ow = new OutputStreamWriter(fo);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major writer = new BufferedWriter(ow);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major String lineData = null;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Integer removeLine = (Integer) removeLineNumbers.first();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major while ((lineData = reader.readLine()) != null) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major removeLine = verifyAndDeleteLine(reader, writer, lineData,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major removeLineNumbers, removeLine);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } catch (Exception e) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("FileEditor.removeLines() - Exception occurred "
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major + "while removing lines from file. " + getFileName(), e);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major throw e;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } finally {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (reader != null) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major try {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major reader.close();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } catch (IOException ie) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Ignore
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (writer != null) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major try {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major writer.flush();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major writer.close();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } catch (IOException ie) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Delete the original file and rename temp file as original
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major File originalFile = new File(getFileName());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major originalFile.delete();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major File tempFile = new File(getTempFileName());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major tempFile.renameTo(originalFile);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return removeLineNumbers.isEmpty(); // If empty then successful
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private Integer verifyAndDeleteLine(LineNumberReader reader,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major BufferedWriter writer, String lineData, TreeSet removeLineNumbers,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Integer removeLine) throws IOException {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Integer nextLineToRemove = removeLine;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major int lineNumber = reader.getLineNumber();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (!removeLineNumbers.isEmpty() && removeLine.intValue() ==
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major lineNumber)
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Determine next line to skip from being written to file
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("FileEditor.skipLinesAndCreateTempFile() - "
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major + "Skipping line[" + lineNumber + "]=" + lineData);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major removeLineNumbers.remove(removeLine);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (!removeLineNumbers.isEmpty()) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major nextLineToRemove = (Integer) removeLineNumbers.first();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } else {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major writer.write(lineData + LINE_SEP);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return nextLineToRemove;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public Map getPatternOccurences(Set matchPatterns) throws Exception {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major boolean matchFound = false;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // A Map which stores key=value as
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // pattern-string=line-number-to-be-removed
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Map matchedLines = new HashMap();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major LineNumberReader reader = null;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major try {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major FileReader fr = new FileReader(getFileName());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major reader = new LineNumberReader(fr);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major reader.setLineNumber(0);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major String lineData = null;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major while ((lineData = reader.readLine()) != null) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major int lineNumber = reader.getLineNumber();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major matchAndAddLineNumbers(matchPatterns, lineData, lineNumber,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major matchedLines);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } catch (Exception e) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("FileEditor.getPatternOccurences() - Exception "
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major + "occurred while searching for patterns. ", e);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major throw e;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } finally {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (reader != null) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major try {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major reader.close();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } catch (IOException ie) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Ignore
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return matchedLines;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private void matchAndAddLineNumbers(Set matchPatterns, String lineData,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major int lineNumber, Map matchedLines) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major boolean isFound = false;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Iterator iter = matchPatterns.iterator();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major while (iter.hasNext() && !isFound) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Iterate through all active patterns and see if they are present
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // in line
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major MatchPattern matchPattern = (MatchPattern) iter.next();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (matchPattern.isActive() && matchPattern.isPresent(lineData)) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("FileEditor.matchAndAddLineNumbers() - Found "
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major + "pattern " + matchPattern);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Add the pattern & line number to the Map.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Integer number = new Integer(lineNumber);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major matchedLines.put(matchPattern.getPattern(), number);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (!matchPattern.isMatchForLastOccurranceInFile()) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // We don't want this match to be active anymore as the
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // first occurance is already found.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major matchPattern.setIsActiveFlag(false);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major isFound = true;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private void printMap(Map map) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Iterator iter = map.entrySet().iterator();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major while (iter.hasNext()) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Map.Entry me = (Map.Entry) iter.next();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("FileEditor.printMap() - " + me.getKey() + "="
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major + me.getValue());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private String getTempFileName() {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return getFileName() + STR_TEMP_FILE_SUFFIX;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private String getFileName() {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return fileName;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private void setFileName(String fileName) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major this.fileName = fileName;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private String fileName;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public static final String LINE_SEP = System.getProperty("line.separator");
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public static final String STR_TEMP_FILE_SUFFIX = ".tmp";
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major}