/**
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 * 
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License 2.0 
 *  which accompanies this distribution, and is available at
 *  https://www.eclipse.org/legal/epl-2.0/
 *
 *  SPDX-License-Identifier: EPL-2.0
 * 
 *  Contributors:
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 * 
 *  This copyright notice shows up in the generated Java code
 */
package org.eclipse.osbp.xtext.perspective.ui.contentassist;

import org.eclipse.osbp.fork.mihalis.opal.widgets.ImageSelectorDialog;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ReplacementTextApplier;

@SuppressWarnings("all")
public class IconNameTextApplier extends ReplacementTextApplier {
  private ContentAssistContext context;
  
  private String[] extensions;
  
  public ContentAssistContext setContext(final ContentAssistContext context) {
    return this.context = context;
  }
  
  public String[] setExtensions(final String[] fileExtensions) {
    return this.extensions = fileExtensions;
  }
  
  @Override
  public String getActualReplacementString(final ConfigurableCompletionProposal proposal) {
    Display display = this.context.getViewer().getTextWidget().getDisplay();
    Shell shell = new Shell(display);
    FillLayout _fillLayout = new FillLayout();
    shell.setLayout(_fillLayout);
    ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(shell, 16);
    imageSelectorDialog.setFilterExtensions(this.extensions);
    String imageFileName = imageSelectorDialog.open(true);
    return "\"".concat(imageFileName).concat("\"");
  }
}
