/**
  * Update settings with new price data
  *
  * @param task UpdateTask to update progress on
  * @param updateAll if true update all prices, if false only update new/missing prices
  * @return true if OK or false if FAILED
  */
 private boolean processUpdate(final UpdateTask task, final boolean updateAll) {
   Map<Integer, PriceData> priceData =
       processUpdate(
           task,
           updateAll,
           new DefaultPricingOptions(),
           profileData.getPriceTypeIDs(),
           Settings.get().getPriceDataSettings().getSource());
   if (priceData != null) {
     Settings.get().setPriceData(priceData);
     return true;
   } else {
     return false;
   }
 }
 @Override
 public InputStream getCacheInputStream() throws IOException {
   File file = new File(Settings.getPathPriceData());
   if (file.exists()) {
     return new FileInputStream(file);
   }
   return null;
 }
 /**
  * Load price data from cache. Don't update missing prices
  *
  * @return
  */
 public boolean load() {
   Map<Integer, PriceData> priceData = processLoad(profileData.getPriceTypeIDs());
   if (priceData != null) {
     Settings.get().setPriceData(priceData);
     return true;
   } else {
     return false;
   }
 }
 public static String getOwnerName(final long ownerID) {
   if (ownerID == 0) { // 0 (zero) is valid, but, should return empty string
     return "";
   }
   String owner = Settings.get().getOwners().get(ownerID);
   if (owner != null) {
     return owner;
   }
   return "!" + String.valueOf(ownerID);
 }
 @Override
 protected void save() {
   Settings.lock("Stockpile (Items Dialog)"); // Lock for Stockpile (Items Dialog)
   if (stockpileItem != null) { // EDIT
     if (itemExist()) { // EDIT + UPDATING (Editing to an existing item)
       StockpileItem existingItem = getExistingItem();
       existingItem.getStockpile().remove(existingItem);
       program.getStockpileTool().removeItem(existingItem);
     }
     stockpileItem.update(getStockpileItem());
   } else if (itemExist()) { // UPDATING (Adding an existing item)
     stockpileItem = getExistingItem();
     stockpileItem.update(getStockpileItem());
   } else { // ADD
     stockpileItem = getStockpileItem();
     stockpile.add(stockpileItem);
   }
   Settings.unlock("Stockpile (Items Dialog)"); // Unlock for Stockpile (Items Dialog)
   program.saveSettings("Stockpile (Items Dialog)"); // Save Stockpile (Items Dialog)
   super.setVisible(false);
 }
 @Override
 public void actionPerformed(final ActionEvent e) {
   if (FilterPanelAction.REMOVE.name().equals(e.getActionCommand())) {
     gui.remove(getThis());
     gui.addEmpty();
     refilter();
   }
   if (FilterPanelAction.FILTER.name().equals(e.getActionCommand())) {
     processFilterAction(e);
   }
   if (FilterPanelAction.FILTER_TIMER.name().equals(e.getActionCommand())) {
     if (!Settings.get().isFilterOnEnter()) {
       processFilterAction(e);
     }
   }
 }
 public static double getPriceReprocessed(Item item) {
   double priceReprocessed = 0;
   int portionSize = 0;
   for (ReprocessedMaterial material : item.getReprocessedMaterial()) {
     // Calculate reprocessed price
     portionSize = material.getPortionSize();
     double price = ApiIdConverter.getPriceReprocessed(material.getTypeID(), false);
     priceReprocessed =
         priceReprocessed
             + (price
                 * Settings.get()
                     .getReprocessSettings()
                     .getLeft(material.getQuantity(), item.isOre()));
   }
   if (priceReprocessed > 0 && portionSize > 0) {
     priceReprocessed = priceReprocessed / portionSize;
   }
   return priceReprocessed;
 }
  private static double getPriceType(
      final int typeID, final boolean isBlueprintCopy, boolean reprocessed) {
    UserItem<Integer, Double> userPrice;
    if (isBlueprintCopy) { // Blueprint Copy
      userPrice = Settings.get().getUserPrices().get(-typeID);
    } else { // All other
      userPrice = Settings.get().getUserPrices().get(typeID);
    }
    if (userPrice != null) {
      return userPrice.getValue();
    }

    // Blueprint Copy (Default Zero)
    if (isBlueprintCopy) {
      return 0;
    }

    // Blueprints Base Price
    Item item = getItem(typeID);
    // Tech 1
    if (item.isBlueprint()) {
      if (Settings.get().isBlueprintBasePriceTech1()
          && !item.getTypeName().toLowerCase().contains("ii")) {
        return item.getPriceBase();
      }
      // Tech 2
      if (Settings.get().isBlueprintBasePriceTech2()
          && item.getTypeName().toLowerCase().contains("ii")) {
        return item.getPriceBase();
      }
    }

    // Price data
    PriceData priceData = Settings.get().getPriceData().get(typeID);
    if (priceData != null && priceData.isEmpty()) {
      priceData = null;
    }
    if (reprocessed) {
      return Settings.get().getPriceDataSettings().getDefaultPriceReprocessed(priceData);
    } else {
      return Settings.get().getPriceDataSettings().getDefaultPrice(priceData);
    }
  }
 @Override
 public void load() {
   jSaveHistory.setSelected(Settings.get().isMarketOrderHistory());
 }
 @Override
 public boolean save() {
   Settings.get().setMarketOrderHistory(jSaveHistory.isSelected());
   return false;
 }
  public IndustryJobsTab(final Program program) {
    super(program, TabsJobs.get().industry(), Images.TOOL_INDUSTRY_JOBS.getIcon(), true);

    ListenerClass listener = new ListenerClass();
    // Table Format
    tableFormat =
        new EnumTableFormatAdaptor<IndustryJobTableFormat, MyIndustryJob>(
            IndustryJobTableFormat.class);
    // Backend
    eventList = program.getProfileData().getIndustryJobsEventList();
    // Sorting (per column)
    eventList.getReadWriteLock().readLock().lock();
    SortedList<MyIndustryJob> sortedList = new SortedList<MyIndustryJob>(eventList);
    eventList.getReadWriteLock().readLock().unlock();

    // Filter
    eventList.getReadWriteLock().readLock().lock();
    filterList = new FilterList<MyIndustryJob>(sortedList);
    eventList.getReadWriteLock().readLock().unlock();
    filterList.addListEventListener(listener);
    // Table Model
    tableModel = EventModels.createTableModel(filterList, tableFormat);
    // Table
    jTable = new JAutoColumnTable(program, tableModel);
    jTable.setCellSelectionEnabled(true);
    PaddingTableCellRenderer.install(jTable, 1);
    // Sorting
    TableComparatorChooser.install(
        jTable, sortedList, TableComparatorChooser.MULTIPLE_COLUMN_MOUSE, tableFormat);
    // Selection Model
    selectionModel = EventModels.createSelectionModel(filterList);
    selectionModel.setSelectionMode(ListSelection.MULTIPLE_INTERVAL_SELECTION_DEFENSIVE);
    jTable.setSelectionModel(selectionModel);
    // Listeners
    installTable(jTable, NAME);
    // Scroll
    JScrollPane jTableScroll = new JScrollPane(jTable);
    // Table Filter
    Map<String, List<Filter>> defaultFilters = new HashMap<String, List<Filter>>();
    List<Filter> filter;
    filter = new ArrayList<Filter>();
    filter.add(
        new Filter(
            LogicType.AND,
            IndustryJobTableFormat.STATE,
            CompareType.EQUALS_NOT,
            IndustryJobState.STATE_DELIVERED.toString()));
    defaultFilters.put(TabsJobs.get().active(), filter);
    filter = new ArrayList<Filter>();
    filter.add(
        new Filter(
            LogicType.AND,
            IndustryJobTableFormat.STATE,
            CompareType.EQUALS,
            IndustryJobState.STATE_DELIVERED.toString()));
    defaultFilters.put(TabsJobs.get().completed(), filter);
    filterControl =
        new IndustryJobsFilterControl(
            program.getMainWindow().getFrame(),
            tableFormat,
            sortedList,
            filterList,
            Settings.get().getTableFilters(NAME),
            defaultFilters);

    // Menu
    installMenu(program, new JobsTableMenu(), jTable, MyIndustryJob.class);

    jInventionSuccess =
        StatusPanel.createLabel(
            TabsJobs.get().inventionSuccess(), Images.JOBS_INVENTION_SUCCESS.getIcon());
    this.addStatusbarLabel(jInventionSuccess);

    jManufactureOutputValue =
        StatusPanel.createLabel(
            TabsJobs.get().manufactureJobsValue(), Images.TOOL_VALUES.getIcon());
    this.addStatusbarLabel(jManufactureOutputValue);

    layout.setHorizontalGroup(
        layout
            .createParallelGroup()
            .addComponent(filterControl.getPanel())
            .addComponent(jTableScroll, 700, 700, Short.MAX_VALUE));
    layout.setVerticalGroup(
        layout
            .createSequentialGroup()
            .addComponent(filterControl.getPanel())
            .addComponent(jTableScroll, 100, 400, Short.MAX_VALUE));
  }
 @Override
 public Proxy getProxy() {
   return Settings.get().getProxy();
 }
 @Override
 public OutputStream getCacheOutputStream() throws IOException {
   return new FileOutputStream(Settings.getPathPriceData());
 }
 @Override
 public List<Long> getLocations() {
   return Settings.get().getPriceDataSettings().getLocations();
 }
 @Override
 public LocationType getLocationType() {
   return Settings.get().getPriceDataSettings().getLocationType();
 }
 @Override
 public PricingFetch getPricingFetchImplementation() {
   return Settings.get().getPriceDataSettings().getSource().getPricingFetch();
 }