/********************************************************************** * Copyright (c) 2012, 2014 Ericsson * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bernd Hufmann - Initial API and implementation **********************************************************************/ package org.eclipse.tracecompass.internal.lttng2.control.core.model.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.tracecompass.internal.lttng2.control.core.model.IBaseEventInfo; import org.eclipse.tracecompass.internal.lttng2.control.core.model.ILoggerInfo; import org.eclipse.tracecompass.internal.lttng2.control.core.model.IUstProviderInfo; /** * <p> * Implementation of the Ust Provider interface (IUstProviderInfo) to store UST * provider related data. * </p> * * @author Bernd Hufmann */ public class UstProviderInfo extends TraceInfo implements IUstProviderInfo { // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ /** * The process ID of the UST provider. */ private int fPid = 0; /** * List of event information. */ private final List<IBaseEventInfo> fEvents = new ArrayList<>(); /** * List of logger information. */ private final List<ILoggerInfo> fLoggers = new ArrayList<>(); // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Constructor * @param name - name of UST provider */ public UstProviderInfo(String name) { super(name); } /** * Copy constructor * @param other - the instance to copy */ public UstProviderInfo(UstProviderInfo other) { super(other); fPid = other.fPid; for (Iterator<IBaseEventInfo> iterator = other.fEvents.iterator(); iterator.hasNext();) { IBaseEventInfo event = iterator.next(); if (event instanceof BaseEventInfo) { fEvents.add(new BaseEventInfo((BaseEventInfo)event)); } else { fEvents.add(event); } } for (Iterator<ILoggerInfo> iterator = other.fLoggers.iterator(); iterator.hasNext();) { ILoggerInfo logger = iterator.next(); if (logger instanceof LoggerInfo) { fLoggers.add(new LoggerInfo((LoggerInfo)logger)); } else { fLoggers.add(logger); } } } // ------------------------------------------------------------------------ // Accessors // ------------------------------------------------------------------------ @Override public int getPid() { return fPid; } @Override public void setPid(int pid) { fPid = pid; } @Override public IBaseEventInfo[] getEvents() { return fEvents.toArray(new IBaseEventInfo[fEvents.size()]); } @Override public void setEvents(List<IBaseEventInfo> events) { fEvents.clear(); for (Iterator<IBaseEventInfo> iterator = events.iterator(); iterator.hasNext();) { IBaseEventInfo eventInfo = iterator.next(); fEvents.add(eventInfo); } } @Override public void addEvent(IBaseEventInfo event) { fEvents.add(event); } @Override public List<ILoggerInfo> getLoggers() { return new ArrayList<>(fLoggers); } @Override public void setLoggers(List<ILoggerInfo> loggers) { fLoggers.clear(); for (ILoggerInfo logger : loggers) { fLoggers.add(logger); } } @Override public void addLogger(ILoggerInfo logger) { fLoggers.add(logger); } @Override public void addLoggers(List<ILoggerInfo> loggers) { fLoggers.addAll(loggers); } // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + fEvents.hashCode(); result = prime * result + fLoggers.hashCode(); result = prime * result + fPid; return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } UstProviderInfo other = (UstProviderInfo) obj; if (!fEvents.equals(other.fEvents)) { return false; } if (!fLoggers.equals(other.fLoggers)) { return false; } if (fPid != other.fPid) { return false; } return true; } @SuppressWarnings("nls") @Override public String toString() { StringBuffer output = new StringBuffer(); output.append("[UstProviderInfo("); output.append(super.toString()); output.append(",PID="); output.append(fPid); output.append(",Events="); if (fEvents.isEmpty()) { output.append("None"); } else { for (Iterator<IBaseEventInfo> iterator = fEvents.iterator(); iterator.hasNext();) { IBaseEventInfo event = iterator.next(); output.append(event.toString()); } } output.append(",Loggers="); if (fLoggers.isEmpty()) { output.append("None"); } else { for (ILoggerInfo logger : fLoggers) { output.append(logger.toString()); } } output.append(")]"); return output.toString(); } }