/**
* Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.tools.forge.core.io;
public abstract class ForgeHiddenOutputFilter implements ForgeOutputFilter {
private ForgeOutputListener target = null;
private boolean hidden = false;
private StringBuffer hiddenBuffer = new StringBuffer();
private StringBuffer targetBuffer = new StringBuffer();
private StringBuffer escapeSequence = new StringBuffer();
public ForgeHiddenOutputFilter() {}
public ForgeHiddenOutputFilter(ForgeOutputListener target) {
this.target = target;
}
protected ForgeOutputListener getTarget() {
return target;
}
@Override
public void outputAvailable(String output) {
for (int i = 0; i < output.length(); i++) {
char c = output.charAt(i);
if (c == 27) {
if (escapeSequence.length() == 0) {
escapeSequence.append(c);
} else {
escapeSequence.append(c);
if (hidden) {
hiddenBuffer.append(escapeSequence);
} else {
targetBuffer.append(escapeSequence);
}
escapeSequence.setLength(0);
}
} else if (c == '%') {
if (escapeSequence.length() == 1) {
if (hidden) {
String toHandle = hiddenBuffer.toString();
hiddenBuffer.setLength(0);
handleFilteredString(toHandle);
} else {
String out = targetBuffer.toString();
targetBuffer.setLength(0);
if (target != null) {
target.outputAvailable(out);
}
}
escapeSequence.setLength(0);
hidden = !hidden;
} else {
escapeSequence.append(c);
if (hidden) {
hiddenBuffer.append(escapeSequence);
} else {
targetBuffer.append(escapeSequence);
}
escapeSequence.setLength(0);
}
} else {
escapeSequence.append(c);
if (hidden) {
hiddenBuffer.append(escapeSequence);
} else {
targetBuffer.append(escapeSequence);
}
escapeSequence.setLength(0);
}
}
if (hiddenBuffer.length() == 0 && targetBuffer.length() != 0) {
String out = targetBuffer.toString();
targetBuffer.setLength(0);
if (target != null) {
target.outputAvailable(out);
}
}
}
}