/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2012 psiinon@gmail.com
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.zaproxy.zap.extension.autoupdate;
import java.util.List;
import javax.swing.Icon;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.view.View;
import org.zaproxy.zap.control.AddOn;
import org.zaproxy.zap.control.AddOnCollection;
import org.zaproxy.zap.view.StatusUI;
public class UninstalledAddOnsTableModel extends AddOnsTableModel {
private static final long serialVersionUID = 1L;
private static final String[] COLUMN_NAMES = {
"", // Column for warning of running issues (e.g. incorrect Java version, missing dependency...)
Constant.messages.getString("cfu.table.header.status"),
Constant.messages.getString("cfu.table.header.name"),
Constant.messages.getString("cfu.table.header.desc"),
Constant.messages.getString("cfu.table.header.update"),
""};
private static final int COLUMN_COUNT = COLUMN_NAMES.length;
public UninstalledAddOnsTableModel(AddOnCollection installedAddOns) {
super(installedAddOns, 4);
}
@Override
public int getColumnCount() {
return COLUMN_COUNT;
}
@Override
public String getColumnName(int col) {
return COLUMN_NAMES[col];
}
@Override
public int getRowCount() {
return getAddOnWrappers().size();
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 0) {//Icon
return Icon.class;
} else if (columnIndex == 1) {//Status (Quality)
return StatusUI.class;
} else if (columnIndex == 5) {//update
return Boolean.class;
}
return String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case COLUMN_ADD_ON_WRAPPER:
return getAddOnWrapper(rowIndex);
case 0:
return Boolean.valueOf(getAddOnWrapper(rowIndex).hasRunningIssues());
case 1:
return View.getSingleton().getStatusUI(getAddOnWrapper(rowIndex).getAddOn().getStatus());
case 2:
return getAddOnWrapper(rowIndex).getAddOn().getName();
case 3:
return getAddOnWrapper(rowIndex).getAddOn().getDescription();
case 4:
int progress = getAddOnWrapper(rowIndex).getProgress();
if (getAddOnWrapper(rowIndex).isFailed()) {
return Constant.messages.getString("cfu.download.failed");
} else if (progress > 0) {
return progress + "%";
} else if (AddOnWrapper.Status.newAddon == getAddOnWrapper(rowIndex).getStatus()) {
return Constant.messages.getString("cfu.table.label.new");
} else {
// TODO change to date ??
return getAddOnWrapper(rowIndex).getAddOn().getFileVersion();
}
case 5:
return getAddOnWrapper(rowIndex).isEnabled();
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (columnIndex == 5
&& getAddOnWrapper(rowIndex).getInstallationStatus() != AddOn.InstallationStatus.DOWNLOADING) {
if (aValue instanceof Boolean) {
getAddOnWrapper(rowIndex).setEnabled(((Boolean) aValue).booleanValue());
this.fireTableCellUpdated(rowIndex, columnIndex);
}
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 5
&& getAddOnWrapper(rowIndex).getInstallationStatus() != AddOn.InstallationStatus.DOWNLOADING) {
// Its the 'enabled' checkbox, and no download is in progress
return true;
}
return false;
}
public boolean canIinstallSelected() {
boolean enable = false;
for (AddOnWrapper addon : getAddOnWrappers()) {
if (addon.isEnabled()) {
return true;
}
}
return enable;
}
public void addAddOn(AddOn addOn) {
addAddOnWrapper(addOn, null);
}
public void setAddOns(List<AddOn> addOnsNotInstalled, AddOnCollection olderAddOns) {
for (AddOn addOn : addOnsNotInstalled) {
AddOnWrapper.Status status = null;
if (olderAddOns != null && olderAddOns.getAddOn(addOn.getId()) == null) {
// Not in the previous set
status = AddOnWrapper.Status.newAddon;
}
addAddOnWrapper(addOn, status);
}
}
@Override
protected void restoreInstallationStatusFailedDownload(AddOnWrapper aow) {
aow.setInstallationStatus(AddOn.InstallationStatus.AVAILABLE);
}
}