OSDN Git Service

NeverNote 0.88.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / gui / ContainsAttributeFilterTable.java
1 /*\r
2  * This file is part of NeverNote \r
3  * Copyright 2009 Randy Baumgarte\r
4  * \r
5  * This file may be licensed under the terms of of the\r
6  * GNU General Public License Version 2 (the ``GPL'').\r
7  *\r
8  * Software distributed under the License is distributed\r
9  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either\r
10  * express or implied. See the GPL for the specific language\r
11  * governing rights and limitations.\r
12  *\r
13  * You should have received a copy of the GPL along with this\r
14  * program. If not, go to http://www.gnu.org/licenses/gpl.html\r
15  * or write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
17  *\r
18 */\r
19 \r
20 package cx.fbn.nevernote.gui;\r
21 \r
22 import java.util.ArrayList;\r
23 \r
24 import com.evernote.edam.type.Note;\r
25 \r
26 import cx.fbn.nevernote.filters.AttributeFilter;\r
27 import cx.fbn.nevernote.sql.NoteTable;\r
28 \r
29 public class ContainsAttributeFilterTable {\r
30         ArrayList<AttributeFilter> table;\r
31         \r
32         public ContainsAttributeFilterTable() {\r
33                 table = new ArrayList<AttributeFilter>();\r
34                 table.add(new AttributeFilter("Images"));\r
35                 table.add(new AttributeFilter("Audio"));\r
36                 table.add(new AttributeFilter("Ink"));\r
37                 table.add(new AttributeFilter("Encrypted Text"));\r
38                 table.add(new AttributeFilter("To-Do Items"));\r
39                 table.add(new AttributeFilter("Unfinished to-do items"));\r
40                 table.add(new AttributeFilter("Finished to-do items"));\r
41                 table.add(new AttributeFilter("Attachment"));\r
42                 table.add(new AttributeFilter("PDF"));\r
43 \r
44 \r
45 \r
46 \r
47                 \r
48         }\r
49         \r
50         public void reset() {\r
51                 for (int i=0; i<table.size(); i++) \r
52                         table.get(i).set(false);\r
53         }\r
54         \r
55         public void select(String name) {\r
56                 for (int i=0; i<table.size(); i++) \r
57                         if (table.get(i).getName().equalsIgnoreCase(name))\r
58                                 table.get(i).set(true);\r
59         }\r
60         \r
61         public int size() {\r
62                 return table.size();\r
63         }\r
64         \r
65         public boolean check(NoteTable sqlTable, Note n) {\r
66                 boolean result = true;\r
67                 \r
68                 for (int i=0; i<table.size(); i++) {\r
69                         if (table.get(i).isSet()) {\r
70                                 n = sqlTable.getNote(n.getGuid(), true, true, false, false, false);\r
71                                 if (table.get(i).getName().equalsIgnoreCase("images"))\r
72                                         result = checkMime(n, "image/");\r
73                                 if (table.get(i).getName().equalsIgnoreCase("audio"))\r
74                                         result = checkMime(n, "audio/");\r
75                                 if (table.get(i).getName().equalsIgnoreCase("ink"))\r
76                                         result = checkMime(n, "application/vnd.evernote.ink");\r
77                                 if (table.get(i).getName().equalsIgnoreCase("Attachment"))\r
78                                         result = checkAttachment(n);\r
79                                 if (table.get(i).getName().equalsIgnoreCase("pdf"))\r
80                                         result = checkMime(n, "application/pdf");\r
81                                 if (table.get(i).getName().equalsIgnoreCase("Encrypted Text"))\r
82                                         result = checkText(n.getContent(), "<en-crypt");\r
83                                 if (table.get(i).getName().equalsIgnoreCase("To-Do Items"))\r
84                                         result = checkText(n.getContent(), "<en-todo");\r
85                                 if (table.get(i).getName().equalsIgnoreCase("Unfinished to-do items"))\r
86                                         result = checkTodo(n.getContent(), false);\r
87                                 if (table.get(i).getName().equalsIgnoreCase("Finished to-do items"))\r
88                                         result = checkTodo(n.getContent(), true);\r
89 \r
90 \r
91                         }\r
92                 }\r
93                 return result;\r
94         }\r
95         \r
96         private boolean checkMime(Note n, String mime) {\r
97                 for (int i=0; i<n.getResourcesSize(); i++) {\r
98                         if (n.getResources().get(i).getMime().startsWith(mime))\r
99                                 return true;\r
100                 }\r
101                 return false;\r
102         }\r
103 \r
104         private boolean checkAttachment(Note n) {\r
105                 for (int i=0; i<n.getResourcesSize(); i++) {\r
106                         if (n.getResources().get(i).getAttributes() != null && n.getResources().get(i).getAttributes().isAttachment())\r
107                                 return true;\r
108                 }\r
109                 return false;\r
110         }\r
111         \r
112         private boolean checkTodo(String content, boolean checked) {\r
113                 int pos = content.indexOf("<en-todo");\r
114                 \r
115                 for (; pos >=0 ; pos=content.indexOf("<en-todo", pos+1)) {\r
116                         int endPos = content.indexOf("/>", pos);\r
117                         String segment = content.substring(pos, endPos);\r
118                         boolean currentState = false;\r
119                         if (segment.indexOf("checked=\"true\"") > -1)\r
120                                         currentState = true;\r
121                         if (currentState == checked)\r
122                                 return true;\r
123                 }\r
124                 \r
125                         \r
126                 return false;\r
127                 \r
128         }\r
129         \r
130         private boolean checkText(String content, String text) {\r
131                 if (content.indexOf(text) > -1)\r
132                         return true;\r
133                 else\r
134                         return false;\r
135         }\r
136         // Get the name of a particular attribute check\r
137         public String getName(int i) {\r
138                 return table.get(i).getName();\r
139         }\r
140 }\r