package jdepend.client.ui.profile.settingpanel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSlider;
import javax.swing.border.TitledBorder;
import jdepend.client.ui.profile.ProfileValidateException;
import jdepend.model.profile.MaintainProfileFacade;
import jdepend.model.profile.model.ComponentProfile;
import jdepend.service.profile.scope.ProfileScopeFacade;
public class ComponentProfileSettingPanel extends ModelProfileSettingPanel {
private ComponentProfile componentProfile;
private JSlider stabilityWithCountScaleJSlider;
private JRadioButton balanceFromPackageRadio;
private JRadioButton balanceFromClassRadio;
public ComponentProfileSettingPanel(ComponentProfile componentProfile) {
this.componentProfile = componentProfile;
this.init();
this.refresh();
}
private void init() {
this.add(this.leftPanel());
this.add(this.rightPanel());
}
protected Component leftPanel() {
JPanel content = new JPanel(new BorderLayout());
JPanel left = new JPanel(new GridLayout(2, 1));
left.setPreferredSize(new Dimension(this.getWidth(), 160));
JPanel stabilityPanel = new JPanel(new GridLayout(2, 1));
stabilityPanel.setBorder(new TitledBorder("选择计算组件稳定性的依据"));
stabilityWithCountScaleJSlider = new JSlider(0, 2);
stabilityPanel.add(stabilityWithCountScaleJSlider);
JPanel stabilityJSliderExplain = new JPanel(new BorderLayout());
stabilityJSliderExplain.add(BorderLayout.WEST, new JLabel("数量"));
stabilityJSliderExplain.add(BorderLayout.EAST, new JLabel("强度"));
stabilityPanel.add(stabilityJSliderExplain);
left.add(stabilityPanel);
JPanel balancePanel = new JPanel(new GridLayout(2, 1));
balancePanel.setBorder(new TitledBorder("选择计算组件内聚性的子元素"));
balanceFromPackageRadio = new JRadioButton(ComponentProfile.balanceFromPackage) {
@Override
protected void fireStateChanged() {
balanceFromClassRadio.setSelected(!balanceFromPackageRadio.isSelected());
}
};
balanceFromClassRadio = new JRadioButton(ComponentProfile.balanceFromClass) {
@Override
protected void fireStateChanged() {
balanceFromPackageRadio.setSelected(!balanceFromClassRadio.isSelected());
}
};
balancePanel.add(balanceFromPackageRadio);
balancePanel.add(balanceFromClassRadio);
left.add(BorderLayout.CENTER, balancePanel);
content.add(BorderLayout.NORTH, left);
content.add(BorderLayout.CENTER, this.getOtherPanel());
return content;
}
@Override
protected void restore() {
this.componentProfile = ProfileScopeFacade.getInstance().getDefaultProfileFacade().getComponentProfile();
this.refresh();
}
@Override
public void refresh() {
stabilityWithCountScaleJSlider.getModel().setValue(
this.getSliderValue(componentProfile.getStabilityWithCountScale()));
if (componentProfile.getBalance().equals(ComponentProfile.balanceFromPackage)) {
balanceFromPackageRadio.setSelected(true);
}
if (componentProfile.getBalance().equals(ComponentProfile.balanceFromClass)) {
balanceFromClassRadio.setSelected(true);
}
}
private int getSliderValue(float scale) {
if (scale == 0F) {
return 0;
} else if (scale == 1.0F) {
return 2;
} else if (scale == 0.5F) {
return 1;
} else {
return 1;
}
}
private float getScale(int value) {
if (value == 0) {
return 0F;
} else if (value == 2) {
return 1.0F;
} else if (value == 1) {
return 0.5F;
} else {
return 0.5F;
}
}
@Override
public void validateData() throws ProfileValidateException {
// TODO Auto-generated method stub
}
@Override
public void save(MaintainProfileFacade maintainProfileFacade) {
ComponentProfile newComponentProfile = new ComponentProfile();
newComponentProfile.setStabilityWithCountScale(this.getScale(stabilityWithCountScaleJSlider.getValue()));
if (balanceFromPackageRadio.isSelected()) {
newComponentProfile.setBalance(ComponentProfile.balanceFromPackage);
}
if (balanceFromClassRadio.isSelected()) {
newComponentProfile.setBalance(ComponentProfile.balanceFromClass);
}
maintainProfileFacade.setComponentProfile(newComponentProfile);
}
@Override
protected String getExplain() {
return componentProfile.getExplain();
}
}