/********************************************************************************* * The contents of this file are subject to the Common Public Attribution * License Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.openemm.org/cpal1.html. The License is based on the Mozilla * Public License Version 1.1 but Sections 14 and 15 have been added to cover * use of software over a computer network and provide for limited attribution * for the Original Developer. In addition, Exhibit A has been modified to be * consistent with Exhibit B. * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * * The Original Code is OpenEMM. * The Original Developer is the Initial Developer. * The Initial Developer of the Original Code is AGNITAS AG. All portions of * the code written by AGNITAS AG are Copyright (c) 2007 AGNITAS AG. All Rights * Reserved. * * Contributor(s): AGNITAS AG. ********************************************************************************/ package org.agnitas.preview; import java.util.Hashtable; import java.util.HashSet; import java.util.Vector; import org.agnitas.backend.Data; import org.agnitas.backend.EMMTag; import org.agnitas.backend.BlockData; public class TAGCheckImpl implements TAGCheck { class Seen { boolean status; String report; public Seen () { status = false; report = null; } } private Data data; private Hashtable <String, Seen> seen; protected Object mkData (String statusID) throws Exception { return new Data ("tagcheck", statusID, "silent"); } protected Object mkEMMTag (String tag) throws Exception { return new EMMTag (data, tag, false); } protected Object mkBlockData (String content) { return new BlockData (content, null, null, -1, -1, 0, null, true, true); } public TAGCheckImpl (long mailingID) throws Exception { data = (Data) mkData ("preview:" + mailingID); seen = new Hashtable <String, Seen> (); } public TAGCheckImpl () throws Exception { this (0); } public void done () { if (data != null) { try { data.done (); } catch (Exception e) { ; } data = null; } } public boolean check (String tag, StringBuffer report) { Seen s = seen.get (tag); if (s == null) { s = new Seen (); try { EMMTag t = (EMMTag) mkEMMTag (tag); HashSet <String> dummy = new HashSet <String> (); t.initialize (data, true); t.requestFields (data, dummy); s.status = true; } catch (Exception e) { s.report = tag + ": " + e.toString (); } } if ((! s.status) && (s.report != null) && (report != null)) { report.append (s.report + "#"); } return s.status; } public boolean check (String tag) { return check (tag, null); } public boolean checkContent (String content, StringBuffer report, Vector <String> failures) { BlockData bd = (BlockData) mkBlockData (content); boolean rc = true; String tag; do { try { tag = bd.get_next_tag (); } catch (Exception e) { tag = null; rc = false; if (report != null) { report.append ("Failed to parse: " + e.toString () + " #"); } } if ((tag != null) && (! check (tag, report))) { rc = false; if (failures != null) { failures.add (tag); } } } while (tag != null); return rc; } }