blob: 4f6457185174a152b15b559c36000ec0c174ceb6 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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 com.android.tools.idea.updater.configure;
import com.android.sdklib.repository.descriptors.IPkgDesc;
import com.android.sdklib.repository.descriptors.PkgType;
import com.android.sdklib.repository.local.LocalPlatformPkgInfo;
import com.android.tools.idea.sdk.remote.UpdatablePkgInfo;
import com.android.tools.idea.sdk.remote.internal.packages.RemotePlatformPkgInfo;
import com.intellij.ui.SimpleTextAttributes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Represents a row in a table in {@link SdkUpdaterConfigurable} associated with a single package.
* Can have three state: not installed, installed but with update available, and installed.
*/
class PlatformDetailsTreeNode extends UpdaterTreeNode {
private NodeStateHolder myStateHolder;
private boolean myIncludePreview;
private final ChangeListener myChangeListener;
public PlatformDetailsTreeNode(@NotNull NodeStateHolder state, boolean includePreview, @Nullable ChangeListener changeListener) {
myStateHolder = state;
myIncludePreview = includePreview;
myStateHolder.setState(getInitialState());
myChangeListener = changeListener;
}
@Override
public NodeStateHolder.SelectedState getInitialState() {
return myStateHolder.getPkg().hasRemote(myIncludePreview) && myStateHolder.getPkg().hasLocal()
? NodeStateHolder.SelectedState.MIXED
: myStateHolder.getPkg().hasLocal() ? NodeStateHolder.SelectedState.INSTALLED : NodeStateHolder.SelectedState.NOT_INSTALLED;
}
@Override
public NodeStateHolder.SelectedState getCurrentState() {
return myStateHolder.getState();
}
@Override
public int compareTo(UpdaterTreeNode o) {
if (!(o instanceof PlatformDetailsTreeNode)) {
return toString().compareTo(o.toString());
}
return myStateHolder.getPkg().compareTo(((PlatformDetailsTreeNode)o).myStateHolder.getPkg());
}
@Override
protected void setState(NodeStateHolder.SelectedState state) {
myStateHolder.setState(state);
if (myChangeListener != null) {
myChangeListener.stateChanged(new ChangeEvent(this));
}
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PlatformDetailsTreeNode)) {
return false;
}
return myStateHolder.getPkg().equals(((PlatformDetailsTreeNode)obj).myStateHolder.getPkg());
}
@Override
public boolean includeInSummary() {
return myStateHolder.getPkg().getPkgDesc(true).getType() == PkgType.PKG_SOURCE ||
myStateHolder.getPkg().getPkgDesc(true).getType() == PkgType.PKG_PLATFORM;
}
@Override
public boolean isPrimary() {
return myStateHolder.getPkg().getPkgDesc(true).getType() == PkgType.PKG_PLATFORM;
}
@Override
public void customizeRenderer(Renderer renderer,
JTree tree,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
SimpleTextAttributes attributes = SimpleTextAttributes.REGULAR_ATTRIBUTES;
UpdatablePkgInfo p = myStateHolder.getPkg();
String result;
if (p.getPkgDesc(true).getType() == PkgType.PKG_PLATFORM) {
String versionName;
if (p.hasLocal()) {
versionName = ((LocalPlatformPkgInfo)p.getLocalInfo()).getAndroidTarget().getVersionName();
}
else {
versionName = ((RemotePlatformPkgInfo)p.getRemote(myIncludePreview)).getVersionName();
}
result = String.format("Android %s Platform", versionName);
if (p.getPkgDesc(myIncludePreview).isObsolete()) {
result += " (Obsolete)";
}
}
else {
result = p.getPkgDesc(myIncludePreview).getListDescription();
}
renderer.getTextRenderer().append(result, attributes);
}
@NotNull
public UpdatablePkgInfo getItem() {
return myStateHolder.getPkg();
}
@Override
protected boolean canHaveMixedState() {
return myStateHolder.getPkg().hasRemote(myIncludePreview) && myStateHolder.getPkg().hasLocal();
}
@Override
public String getStatusString() {
if (getInitialState() == NodeStateHolder.SelectedState.NOT_INSTALLED) {
return "Not installed";
}
else if (getInitialState() == NodeStateHolder.SelectedState.MIXED) {
return "Update Available: " + myStateHolder.getPkg().getRemote(myIncludePreview).getRevision();
}
else {
return "Installed";
}
}
public IPkgDesc getItemDesc() {
return getItem().getPkgDesc(myIncludePreview);
}
}