Skip to content

Commit

Permalink
Added taxonomy columns to statement of assets and security performanc…
Browse files Browse the repository at this point in the history
…e views
  • Loading branch information
buchen committed May 29, 2014
1 parent 9880c0f commit 1e21055
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 115 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,15 @@ private void doAddGroup(String group, Map<Column, List<Object>> visible)
if (visible.containsKey(column))
continue;

policy.create(column, null, column.getDefaultSortDirection(), column.getDefaultWidth());
if (column.hasOptions())
{
for (Integer option : column.getOptions())
policy.create(column, option, column.getDefaultSortDirection(), column.getDefaultWidth());
}
else
{
policy.create(column, null, column.getDefaultSortDirection(), column.getDefaultWidth());
}
}
}
finally
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import name.abuchen.portfolio.model.AttributeTypes;
import name.abuchen.portfolio.model.PortfolioTransaction;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.model.Taxonomy;
import name.abuchen.portfolio.model.Transaction;
import name.abuchen.portfolio.model.Values;
import name.abuchen.portfolio.snapshot.ReportingPeriod;
Expand Down Expand Up @@ -35,6 +36,7 @@
import name.abuchen.portfolio.ui.views.columns.IsinColumn;
import name.abuchen.portfolio.ui.views.columns.NameColumn;
import name.abuchen.portfolio.ui.views.columns.NoteColumn;
import name.abuchen.portfolio.ui.views.columns.TaxonomyColumn;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
Expand Down Expand Up @@ -401,6 +403,13 @@ public String getText(Object r)

private void createAdditionalColumns()
{
for (Taxonomy taxonomy : getClient().getTaxonomies())
{
Column column = new TaxonomyColumn(taxonomy);
column.setVisible(false);
recordColumns.addColumn(column);
}

for (final AttributeType attribute : AttributeTypes.available(Security.class))
{
Column column = new AttributeColumn(attribute);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package name.abuchen.portfolio.ui.views;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

import name.abuchen.portfolio.model.AttributeType;
import name.abuchen.portfolio.model.AttributeTypes;
import name.abuchen.portfolio.model.Classification;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.LatestSecurityPrice;
import name.abuchen.portfolio.model.PortfolioTransaction;
Expand All @@ -29,7 +27,6 @@
import name.abuchen.portfolio.ui.util.ColumnEditingSupport;
import name.abuchen.portfolio.ui.util.ColumnEditingSupport.ModificationListener;
import name.abuchen.portfolio.ui.util.ColumnViewerSorter;
import name.abuchen.portfolio.ui.util.OptionLabelProvider;
import name.abuchen.portfolio.ui.util.ShowHideColumnHelper;
import name.abuchen.portfolio.ui.util.SimpleListContentProvider;
import name.abuchen.portfolio.ui.util.StringEditingSupport;
Expand All @@ -38,6 +35,7 @@
import name.abuchen.portfolio.ui.views.columns.AttributeColumn;
import name.abuchen.portfolio.ui.views.columns.IsinColumn;
import name.abuchen.portfolio.ui.views.columns.NoteColumn;
import name.abuchen.portfolio.ui.views.columns.TaxonomyColumn;
import name.abuchen.portfolio.ui.wizards.datatransfer.ImportQuotesWizard;
import name.abuchen.portfolio.ui.wizards.security.EditSecurityDialog;
import name.abuchen.portfolio.ui.wizards.splits.StockSplitWizard;
Expand Down Expand Up @@ -102,7 +100,11 @@ public SecuritiesTable(Composite parent, AbstractFinanceView view)
addColumnDateOfLatestHistoricalPrice();

for (Taxonomy taxonomy : getClient().getTaxonomies())
addTaxonomyColumn(support, taxonomy);
{
Column column = new TaxonomyColumn(taxonomy);
column.setVisible(false);
support.addColumn(column);
}

addAttributeColumns();

Expand Down Expand Up @@ -195,90 +197,6 @@ public String getText(Object e)
support.addColumn(column);
}

private void addTaxonomyColumn(ShowHideColumnHelper support, final Taxonomy taxonomy)
{
String name = taxonomy.getName();
List<String> labels = taxonomy.getDimensions();

List<Integer> options = new ArrayList<Integer>();

StringBuilder menuLabels = new StringBuilder("{0,choice,"); //$NON-NLS-1$
StringBuilder columnLabels = new StringBuilder("{0,choice,"); //$NON-NLS-1$

int heigth = taxonomy.getHeigth();
for (int ii = 1; ii < heigth; ii++) // 1 --> skip taxonomy root node
{
options.add(ii);

if (ii > 1)
{
menuLabels.append('|');
columnLabels.append('|');
}

String label = null;
if (labels != null && ii <= labels.size())
label = labels.get(ii - 1);

menuLabels.append(ii).append('#');
columnLabels.append(ii).append('#');

if (label != null)
{
menuLabels.append(label);
columnLabels.append(label);
}
else
{
menuLabels.append(MessageFormat.format(Messages.LabelLevelNumber, ii));
columnLabels.append(MessageFormat.format(Messages.LabelLevelNameNumber, name, ii));
}
}

options.add(100);

menuLabels.append("|100#" + Messages.LabelFullClassification + "}"); //$NON-NLS-1$ //$NON-NLS-2$
columnLabels.append("|100#").append(name).append("}"); //$NON-NLS-1$ //$NON-NLS-2$

Column column = new Column(taxonomy.getId(), name, SWT.LEFT, 120);
column.setOptions(menuLabels.toString(), columnLabels.toString(), options.toArray(new Integer[0]));
column.setLabelProvider(new OptionLabelProvider()
{
@Override
public String getText(Object e, Integer option)
{
Security security = (Security) e;
List<Classification> classifications = taxonomy.getClassifications(security);

if (classifications.isEmpty())
return null;

StringBuilder answer = new StringBuilder();

for (Classification c : classifications)
{
if (answer.length() > 0)
answer.append(", "); //$NON-NLS-1$

if (option == 100)
{
answer.append(c.getPathName(false));
}
else
{
List<Classification> path = c.getPathToRoot();
if (option < path.size())
answer.append(path.get(option).getName());
}
}

return answer.toString();
}
});
column.setVisible(false);
support.addColumn(column);
}

private void addColumnLatestPrice()
{
Column column;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import name.abuchen.portfolio.model.AttributeTypes;
import name.abuchen.portfolio.model.Classification;
import name.abuchen.portfolio.model.Client;
import name.abuchen.portfolio.model.InvestmentVehicle;
import name.abuchen.portfolio.model.Named;
import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.model.Taxonomy;
Expand Down Expand Up @@ -45,6 +46,7 @@
import name.abuchen.portfolio.ui.views.columns.NameColumn;
import name.abuchen.portfolio.ui.views.columns.NameColumn.NameColumnLabelProvider;
import name.abuchen.portfolio.ui.views.columns.NoteColumn;
import name.abuchen.portfolio.ui.views.columns.TaxonomyColumn;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
Expand Down Expand Up @@ -203,6 +205,11 @@ public boolean canEdit(Object element)
}.setMandatory(true).addListener(new MarkDirtyListener(this.owner)));
support.addColumn(column);

column = new NoteColumn();
column.getEditingSupport().addListener(new MarkDirtyListener(this.owner));
column.setVisible(false);
support.addColumn(column);

column = new Column("2", Messages.ColumnTicker, SWT.None, 60); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
Expand All @@ -215,12 +222,25 @@ public String getText(Object e)
});
support.addColumn(column);

column = new Column("12", Messages.ColumnWKN, SWT.None, 60); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object e)
{
Element element = (Element) e;
return element.isSecurity() ? element.getSecurity().getWkn() : null;
}
});
column.setVisible(false);
support.addColumn(column);

column = new IsinColumn("3"); //$NON-NLS-1$
column.getEditingSupport().addListener(new MarkDirtyListener(this.owner));
column.setVisible(false);
support.addColumn(column);

column = new Column(Messages.ColumnQuote, SWT.RIGHT, 60);
column = new Column("4", Messages.ColumnQuote, SWT.RIGHT, 60); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
Expand All @@ -233,7 +253,7 @@ public String getText(Object e)
});
support.addColumn(column);

column = new Column(Messages.ColumnMarketValue, SWT.RIGHT, 80);
column = new Column("5", Messages.ColumnMarketValue, SWT.RIGHT, 80); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
Expand All @@ -251,7 +271,7 @@ public Font getFont(Object e)
});
support.addColumn(column);

column = new Column(Messages.ColumnShareInPercent, SWT.RIGHT, 80);
column = new Column("6", Messages.ColumnShareInPercent, SWT.RIGHT, 80); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
Expand All @@ -274,7 +294,7 @@ public Font getFont(Object e)
});
support.addColumn(column);

column = new Column(Messages.ColumnPurchasePrice, SWT.RIGHT, 60);
column = new Column("7", Messages.ColumnPurchasePrice, SWT.RIGHT, 60); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
Expand All @@ -292,7 +312,7 @@ public String getText(Object e)
column.setVisible(false);
support.addColumn(column);

column = new Column(Messages.ColumnPurchaseValue, SWT.RIGHT, 80);
column = new Column("8", Messages.ColumnPurchaseValue, SWT.RIGHT, 80); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
Expand All @@ -312,7 +332,7 @@ public Font getFont(Object e)
column.setVisible(false);
support.addColumn(column);

column = new Column(Messages.ColumnProfitLoss, SWT.RIGHT, 80);
column = new Column("9", Messages.ColumnProfitLoss, SWT.RIGHT, 80); //$NON-NLS-1$
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
Expand Down Expand Up @@ -346,7 +366,7 @@ public Font getFont(Object e)
column.setVisible(false);
support.addColumn(column);

column = new Column(Messages.ColumnIRRPerformance, SWT.RIGHT, 80);
column = new Column("10", Messages.ColumnIRRPerformance, SWT.RIGHT, 80); //$NON-NLS-1$
column.setOptions(Messages.LabelReportingYears, Messages.ColumnIRRPerformanceOption, 1, 2, 3, 4, 5, 10);
column.setLabelProvider(new OptionLabelProvider()
{
Expand Down Expand Up @@ -384,7 +404,7 @@ else if (irr > 0)
column.setVisible(false);
support.addColumn(column);

column = new Column(Messages.ColumnTotalProfitLoss, SWT.RIGHT, 80);
column = new Column("11", Messages.ColumnTotalProfitLoss, SWT.RIGHT, 80); //$NON-NLS-1$
column.setOptions(Messages.LabelReportingYears, Messages.ColumnTotalProfitLossOption, 1, 2, 3, 4, 5, 10);
column.setLabelProvider(new OptionLabelProvider()
{
Expand Down Expand Up @@ -422,24 +442,7 @@ else if (delta > 0)
column.setVisible(false);
support.addColumn(column);

column = new Column(Messages.ColumnWKN, SWT.None, 60);
column.setLabelProvider(new ColumnLabelProvider()
{
@Override
public String getText(Object e)
{
Element element = (Element) e;
return element.isSecurity() ? element.getSecurity().getWkn() : null;
}
});
column.setVisible(false);
support.addColumn(column);

column = new NoteColumn();
column.getEditingSupport().addListener(new MarkDirtyListener(this.owner));
column.setVisible(false);
support.addColumn(column);

addTaxonomyColumns();
addAttributeColumns();

support.createColumns();
Expand Down Expand Up @@ -469,6 +472,16 @@ private void addAttributeColumns()
}
}

private void addTaxonomyColumns()
{
for (Taxonomy taxonomy : client.getTaxonomies())
{
Column column = new TaxonomyColumn(taxonomy);
column.setVisible(false);
support.addColumn(column);
}
}

public void hookMenuListener(IMenuManager manager, final AbstractFinanceView view)
{
Element element = (Element) ((IStructuredSelection) assets.getSelection()).getFirstElement();
Expand Down Expand Up @@ -748,9 +761,13 @@ else if (category != null)
public <T> T adapt(Class<T> type)
{
if (type == Security.class)
{
return type.cast(getSecurity());
}
else if (type == Attributable.class)
{
return type.cast(getSecurity());
}
else if (type == Named.class)
{
if (isSecurity())
Expand All @@ -762,8 +779,19 @@ else if (isCategory())
else
return null;
}
else if (type == InvestmentVehicle.class)
{
if (isSecurity())
return type.cast(getSecurity());
else if (isAccount())
return type.cast(getAccount());
else
return null;
}
else
{
return null;
}
}
}

Expand Down
Loading

0 comments on commit 1e21055

Please sign in to comment.