package lws;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
public class LineTransformer extends Filter{
public LineTransformer(Pipe input, Pipe output) {
super(input, output);
}
@Override
protected void transform(){
try{
ArrayList<String> lines = new ArrayList<String>();
CharArrayWriter writer = new CharArrayWriter();
//To get formed lines of String
int c = input_.read();
while(c != -1){
writer.write(c);
if(((char) c) == '\n'){
String line = writer.toString();
lines.add(line);
writer.reset();
}
c = input_.read();
}
Iterator<String> iterator = lines.iterator();
while(iterator.hasNext()){
boolean flag=true;
char[] chars = ((String) iterator.next()).toCharArray();
for(int i = 0; i < chars.length; i++){
if((chars[i]!=' ')&&flag==true){
if((chars[i]>='a')&&(chars[i]<='z')){
chars[i]-=32;
}
}else{
flag=false;
}
output_.write(chars[i]);
}
}
output_.closeWriter();
}catch(IOException exc){
exc.printStackTrace();
System.err.println("KWIC Error: Could not sort circular shifts.");
System.exit(1);
}
}
}
package lws;
import java.io.IOException;
public class Output extends Filter{
public Output(Pipe input){
super(input, null);
}
protected void transform(){
try{
int c = input_.read();
while(c != -1){
System.out.print((char) c);
c = input_.read();
}
}catch(IOException exc){
exc.printStackTrace();
System.err.println("KWIC Error: Broken pipe");
System.exit(1);
}
}
}
package lws;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;
public class ShiftFilter extends Filter{
private ArrayList<String> noiseWords;
public ShiftFilter(Pipe input,Pipe output,ArrayList<String> al){
super(input,output);
noiseWords=al;
}
protected void transform(){
try{
ArrayList<String> lines = new ArrayList<String>();
CharArrayWriter writer = new CharArrayWriter();
//To get formed lines of String
int c = input_.read();
while(c != -1){
writer.write(c);
if(((char) c) == '\n'){
String line = writer.toString();
lines.add(line);
writer.reset();
}
c = input_.read();
}
//To delete the noisy lines of String
deleteNoise(lines);
//To output the operated Strings
Iterator<String> iterator = lines.iterator();
while(iterator.hasNext()){
char[] chars = ((String) iterator.next()).toCharArray();
for(int i = 0; i < chars.length; i++)
output_.write(chars[i]);
}
output_.closeWriter();
}catch(IOException exc){
exc.printStackTrace();
System.err.println("KWIC Error: Could not sort circular shifts.");
System.exit(1);
}
}
//The method to implements the function of delete lines starting by a noisy word
private void deleteNoise(ArrayList<String> lines){
for(int i=0;i<lines.size();i++){
String line=new String(lines.get(i));
StringTokenizer tokenizer = new StringTokenizer(line);
String firstWord=tokenizer.nextToken();
for(int j=0;j<noiseWords.size();j++){
if(firstWord.equals(noiseWords.get(j))){
lines.remove(i);
i--;//If a line is deleted ,the index i must to be reduced by 1
break;
}
}
}
}
}