Skip to content

Method: equals(Object)

1: package pruefskript.parser.nodes;
2:
3: import java.io.File;
4: import java.io.IOException;
5: import java.util.ArrayList;
6: import java.util.List;
7:
8: import org.apache.commons.io.FileUtils;
9: import org.apache.commons.io.LineIterator;
10:
11: import basic.PrinterConstants;
12: import basic.PruefskriptConstants;
13: import pruefskript.CommunicationManager;
14: import pruefskript.parser.exceptions.CheckScriptException;
15: import pruefskript.parser.exceptions.WrongNodeException;
16: import pruefskript.parser.values.AbstractReturnValue;
17: import pruefskript.parser.values.NumericValue;
18: import pruefskript.parser.values.StringValue;
19: import pruefskript.parser.values.VoidValue;
20:
21: /**
22: * Mit FGrepNode koennen Ausdruecke in Dateien gesucht werden.
23: *
24: * @author group B5
25: *
26: */
27: public class FGrepNode extends AbstractBinaryOperationNode {
28:         /**
29:          * FGrepNode.
30:          *
31:          * @param operand1
32:          * AbstractNode
33:          * @param operand2
34:          * AbstractNode
35:          */
36:         public FGrepNode(final AbstractNode operand1, final AbstractNode operand2) {
37:                 super(operand1, operand2);
38:         }
39:
40:         @Override
41:         public String toString() {
42:                 return PruefskriptConstants.FGREPTITLE + PruefskriptConstants.BRACKET_OPEN
43:                                 + super.toString() + PruefskriptConstants.BRACKET_CLOSE;
44:         }
45:
46:         @Override
47:         public boolean equals(final Object obj) {
48:•                return super.equals(obj) && obj instanceof FGrepNode;
49:
50:         }
51:
52:         @Override
53:         public int hashCode() {
54:                 return super.hashCode() + PruefskriptConstants.FGREPNODE_HASHCODE;
55:         }
56:
57:         @Override
58:         public VoidValue interpret(final CommunicationManager mgr) throws CheckScriptException {
59:
60:                 final AbstractReturnValue op1 = getOperand1().interpret(mgr);
61:                 final AbstractReturnValue op2 = getOperand2().interpret(mgr);
62:
63:                 if (op1.isStringValue() && op2.isStringValue()) {
64:
65:                         final List<String> results = new ArrayList<String>();
66:                         final LineIterator it;
67:                         try {
68:                                 it = FileUtils.lineIterator(new File(op1.toStringValue().getValue()),
69:                                                 PrinterConstants.ENCODING);
70:                                 try {
71:                                         while (it.hasNext()) {
72:                                                 final String line = it.nextLine();
73:                                                 if (line.matches(op2.toStringValue().getValue())) {
74:                                                         results.add(line);
75:                                                 }
76:                                         }
77:                                 } finally {
78:                                         LineIterator.closeQuietly(it);
79:                                 }
80:                         } catch (final IOException e) {
81:                                 mgr.addFatalError(op1.toStringValue().getValue() + e);
82:                         }
83:                         mgr.addValue(basic.PruefskriptConstants.FGREPTITLE, PruefskriptConstants.FGREPSIZE,
84:                                         new NumericValue(results.size()));
85:                         int i = 1;
86:                         for (String string : results) {
87:                                 mgr.addValue(basic.PruefskriptConstants.FGREPTITLE,
88:                                                 PruefskriptConstants.FGREPMATCHES + i, new StringValue(string));
89:                                 i++;
90:                         }
91:                 } else {
92:                         throw new WrongNodeException(PruefskriptConstants.UNEXPECTED_STRING_OPERATION);
93:                 }
94:
95:                 return new VoidValue();
96:         }
97: }