/* Soot - a J*va Optimization Framework
* Copyright (C) 2003 Jennifer Lhotak
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package ca.mcgill.sable.soot.attributes;
import java.util.*;
public class SootAttributesHandler {
private ArrayList attrList;
private String fileName;
private HashMap projList;
private long valuesSetTime;
private boolean update = true;
private ArrayList keyList;
private ArrayList typesToShow;
private boolean showAllTypes = true;
private static final String NEWLINE = "\n\r";
public SootAttributesHandler() {
}
public void setAttrList(ArrayList attrList) {
this.attrList = new ArrayList();
this.attrList.addAll(attrList);
}
public String getJimpleAttributes(int lnNum) {
StringBuffer sb = new StringBuffer();
if (getAttrList() == null) return sb.toString();
Iterator it = getAttrList().iterator();
while (it.hasNext()) {
SootAttribute sa = (SootAttribute)it.next();
if (sa.attrForJimpleLn(lnNum)) {
if (showAllTypes){
sb.append(sa.getAllTextAttrs("\n"));
}
else {
Iterator typesIt = typesToShow.iterator();
while (typesIt.hasNext()){
sb.append(sa.getTextAttrsForType("\n", (String)typesIt.next()));
}
}
}
}
String result = sb.toString();
result = result.trim();
if (result.length() == 0 ) return null;
return result;
}
public ArrayList getJimpleLinks(int lnNum){
Iterator it = getAttrList().iterator();
ArrayList list = new ArrayList();
while (it.hasNext()){
SootAttribute sa = (SootAttribute)it.next();
if (sa.attrForJimpleLn(lnNum)){
list = sa.getAllLinkAttrs();
}
}
return list;
}
public String getJavaAttribute(int lnNum) {
StringBuffer sb = new StringBuffer();
if (getAttrList() == null) return sb.toString();
Iterator it = getAttrList().iterator();
while (it.hasNext()) {
SootAttribute sa = (SootAttribute)it.next();
if (sa.attrForJavaLn(lnNum)) {
if (showAllTypes){
sb.append(sa.getAllTextAttrs("<br>"));
}
else {
Iterator typesIt = typesToShow.iterator();
while (typesIt.hasNext()){
sb.append(sa.getTextAttrsForType("<br>", (String)typesIt.next()));
}
}
}
}
return sb.toString();
}
public ArrayList getJavaLinks(int lnNum){
ArrayList list = new ArrayList();
if (getAttrList() == null) return list;
Iterator it = getAttrList().iterator();
while (it.hasNext()){
SootAttribute sa = (SootAttribute)it.next();
if (sa.attrForJavaLn(lnNum)){
if (sa.getAllLinkAttrs() != null){
list.addAll(sa.getAllLinkAttrs());
}
}
}
return list;
}
/**
* Returns the projList.
* @return HashMap
*/
public HashMap getProjList() {
return projList;
}
/**
* Sets the projList.
* @param projList The projList to set
*/
public void setProjList(HashMap projList) {
this.projList = projList;
}
/**
* Returns the attrList.
* @return Vector
*/
public ArrayList getAttrList() {
return attrList;
}
/**
* Returns the fileName.
* @return String
*/
public String getFileName() {
return fileName;
}
/**
* Sets the fileName.
* @param fileName The fileName to set
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**
* @return
*/
public long getValuesSetTime() {
return valuesSetTime;
}
/**
* @param l
*/
public void setValuesSetTime(long l) {
valuesSetTime = l;
}
/**
* @return
*/
public boolean isUpdate() {
return update;
}
/**
* @param b
*/
public void setUpdate(boolean b) {
update = b;
}
/**
* @return
*/
public ArrayList getKeyList() {
if (keyList == null) return keyList;
if (isShowAllTypes()){
return keyList;
}
else {
ArrayList typeList = new ArrayList();
Iterator kIt = keyList.iterator();
while (kIt.hasNext()){
AnalysisKey key = (AnalysisKey)kIt.next();
if (getTypesToShow().contains(key.getType())){
typeList.add(key);
}
}
return typeList;
}
}
/**
* @param list
*/
public void setKeyList(ArrayList list) {
keyList = list;
}
/**
* @return
*/
public ArrayList getTypesToShow() {
return typesToShow;
}
/**
* @param list
*/
public void setTypesToShow(ArrayList list) {
typesToShow = list;
}
/**
* @return
*/
public boolean isShowAllTypes() {
return showAllTypes;
}
/**
* @param b
*/
public void setShowAllTypes(boolean b) {
showAllTypes = b;
}
}