You are on page 1of 14

Title: KWIC using Pipes and filter

Alphabetizer: import java.util.Array ist! import java.util.Iterator! import java.io.CharArrayWriter! import java.io.I"#$%eption!

publi% %lass Alphabetizer e$tends &ilter'

publi% Alphabetizer(Pipe input) Pipe output*' super(input) output*! +

prote%ted void transform(*' try' Array ist lines , ne- Array ist(*! CharArrayWriter -riter , ne- CharArrayWriter(*!

int % , input..read(*! -hile(% /, 01*' -riter.-rite(%*! if(((%har* %* ,, 23n2*' 4tring line , -riter.to4tring(*! lines.add(line*!

-riter.reset(*! + % , input..read(*! +

sort(lines*!

Iterator iterator , lines.iterator(*! -hile(iterator.has5e$t(**' %har67 %hars , ((4tring* iterator.ne$t(**.toCharArray(*! for(int i , 8! i 9 %hars.length! i::* output..-rite(%hars6i7*! +

output..%loseWriter(*! +%at%h(I"#$%eption e$%*' e$%.print4ta%;Tra%e(*! 4ystem.err.println(<KWIC #rror: Could not sort %ir%ular shifts.<*! 4ystem.e$it(1*! +

private void sort(Array ist lines*' == heap sort int size , lines.size(*!

for(int i , (size = > 0 1*! i ?, 8! i00* sift@o-n(lines) i) size*!

for(int i , (size 0 1*! i ?, 1! i00*' "bje%t tmp , lines.get(8*! lines.set(8) lines.get(i**! lines.set(i) tmp*! sift@o-n(lines) 8) i*! + + private void sift@o-n(Array ist lines) int root) int bottom*' int ma$.%hild , root A > : 1!

-hile(ma$.%hild 9 bottom*' if((ma$.%hild : 1* 9 bottom* if(((4tring* lines.get(ma$.%hild : 1**.%ompareTo((4tring* lines.get(ma$.%hild** ? 8* ma$.%hild::!

if(((4tring* lines.get(root**.%ompareTo((4tring* lines.get(ma$.%hild** 9 8*' "bje%t tmp , lines.get(root*! lines.set(root) lines.get(ma$.%hild**! lines.set(ma$.%hild) tmp*! root , ma$.%hild! ma$.%hild , root A > : 1!

+else brea;! + +

+ Cir%ular4hifter:

import java.io.I"#$%eption! import java.io.CharArrayWriter! import java.util.4tringTo;enizer! publi% %lass Cir%ular4hifter e$tends &ilter'

publi% Cir%ular4hifter(Pipe input) Pipe output*' super(input) output*! +

prote%ted void transform(*' try' CharArrayWriter -riter , ne- CharArrayWriter(*!

int % , input..read(*! -hile(% /, 01*'

if(((%har* %* ,, 23n2*' 4tring line , -riter.to4tring(*! 4tringTo;enizer to;enizer , ne- 4tringTo;enizer(line*! 4tring67 -ords , ne- 4tring6to;enizer.%ountTo;ens(*7! int i , 8! -hile(to;enizer.hasBoreTo;ens(** -ords6i::7 , to;enizer.ne$tTo;en(*!

for(i , 8! i 9 -ords.length! i::*' 4tring shift , <<! for(int j , i! j 9 (-ords.length : i*! j::*' shift :, -ords6j C -ords.length7! if(j 9 (-ords.length : i 0 1** shift :, < <! + shift :, 23n2! %har67 %hars , shift.toCharArray(*! for(int j , 8! j 9 %hars.length! j::* output..-rite(%hars6j7*! + -riter.reset(*! +else -riter.-rite(%*!

% , input..read(*!

output..%loseWriter(*! +%at%h(I"#$%eption e$%*' e$%.print4ta%;Tra%e(*! 4ystem.err.println(<KWIC #rror: Could not ma;e %ir%ular shifts.<*! 4ystem.e$it(1*! + +

+ Input: import java.io.I"#$%eption! import java.io.Input4tream!

publi% %lass Input e$tends &ilter'

private Input4tream in.!

publi% Input(Input4tream in) Pipe output*' super(null) output*! in. , in! +

prote%ted void transform(*' try' boolean is.ne-.line , false! boolean is.ne-.-ord , false! boolean is.line.started , false!

int % , in..read(*! -hile(% /, 01*' s-it%h((byte* %*'

%ase 23n2: is.ne-.line , true! brea;! %ase 2 2: is.ne-.-ord , true! brea;! %ase 23t2: is.ne-.-ord , true! brea;! %ase 23r2: brea;! default: if(is.ne-.line*' output..-rite(23n2*! is.ne-.line , false! is.line.started , false! + if(is.ne-.-ord*' if(is.line.started* output..-rite(2 2*! is.ne-.-ord , false! + output..-rite(%*! is.line.started , true! brea;!

+ % , in..read(*! +

output..-rite(23n2*! output..%loseWriter(*! +%at%h(I"#$%eption e$%*' e$%.print4ta%;Tra%e(*! 4ystem.err.println(<KWIC #rror: Could not read the input file.<*! 4ystem.e$it(1*! + +

Pipe: import java.io.PipedDeader! import java.io.PipedWriter! import java.io.I"#$%eption! publi% %lass Pipe' private PipedDeader reader.! private PipedWriter -riter.! publi% Pipe(* thro-s I"#$%eption' -riter. , ne- PipedWriter(*! reader. , ne- PipedDeader(*! -riter..%onne%t(reader.*! + publi% void -rite(int %* thro-s I"#$%eption' -riter..-rite(%*! + publi% int read(* thro-s I"#$%eption' return reader..read(*! + publi% void %loseWriter(* thro-s I"#$%eption' -riter..flush(*! -riter..%lose(*! + publi% void %loseDeader(* thro-s I"#$%eption' reader..%lose(*! +

+ &ilter: abstra%t publi% %lass &ilter implements Dunnable' prote%ted Pipe input.! prote%ted Pipe output.! publi% &ilter(Pipe input) Pipe output*' input. , input! output. , output! + publi% void start(*' if(/is.started.*' is.started. , true! Thread thread , ne- Thread(this*! thread.start(*! + + publi% void stop(*' is.started. , false! + publi% void run(*' transform(*! + abstra%t prote%ted void transform(*!

+ "utput:

import java.io.I"#$%eption! publi% %lass "utput e$tends &ilter' publi% "utput(Pipe input*' super(input) null*! + prote%ted void transform(*' try' int % , input..read(*! -hile(% /, 01*' 4ystem.out.print((%har* %*! % , input..read(*! + +%at%h(I"#$%eption e$%*' e$%.print4ta%;Tra%e(*! 4ystem.err.println(<KWIC #rror: Ero;en pipe<*! 4ystem.e$it(1*! + ++ Bain: publi% %lass KWIC' publi% void e$e%ute(4tring file*' try' Pipe in.%s , ne- Pipe(*! Pipe %s.al , ne- Pipe(*! Pipe al.ou , ne- Pipe(*! &ileInput4tream in , ne- &ileInput4tream(file*!

Input input , ne- Input(in) in.%s*! Cir%ular4hifter shifter , ne- Cir%ular4hifter(in.%s) %s.al*! Alphabetizer alpha , ne- Alphabetizer(%s.al) al.ou*! "utput output , ne- "utput(al.ou*! input.start(*! == run it / shifter.start(*! alpha.start(*! output.start(*! +%at%h(I"#$%eption e$%*' e$%.print4ta%;Tra%e(*! + + publi% stati% void main(4tring67 args*' KWIC ;-i% , ne- KWIC(*! ;-i%.e$e%ute(<C:=temp=;-i%.pipe.filter=Input.t$t<*! + Input &ile(input.t$t*: et us % Fava programming language "utput: et us % us % et % et us Fava programming language programming language Fava language Fava programming

You might also like