blob: 5e1b4618c940cc0982b52ca905cb8c78c1f5197b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2015 IBM Corporation and others.
*
* 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:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.e4.core.internal.tests.manual;
import java.text.NumberFormat;
import javax.inject.Inject;
import org.eclipse.e4.core.contexts.ContextFunction;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.contexts.RunAndTrack;
import org.eclipse.e4.core.internal.tests.CoreTestsActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
/**
*
*/
public class ContextExample {
static class Crayon {
@Inject
IPaletteService pallete;
public void draw() {
if (pallete == null)
System.out.println("No palette");
else
System.out.println("My pen is: " + pallete.getColor());
}
}
static enum Color {
RED, BLUE, YELLOW, GREEN, ORANGE, PURPLE;
}
interface IPaletteService {
public Color getColor();
}
static class PaletteImpl implements IPaletteService {
private final Color color;
PaletteImpl(Color color) {
this.color = color;
}
@Override
public Color getColor() {
return color;
}
}
static class ComplementaryColor extends ContextFunction {
@Override
public Object compute(IEclipseContext context, String contextKey) {
switch ((Color) context.get("color")) {
case RED:
return Color.GREEN;
case GREEN:
return Color.RED;
case BLUE:
return Color.ORANGE;
case ORANGE:
return Color.BLUE;
case YELLOW:
return Color.PURPLE;
case PURPLE:
return Color.YELLOW;
default:
return null;
}
}
}
static class ResourceSelection extends ContextFunction {
@Override
public Object compute(IEclipseContext context, String contextKey) {
return null;
}
}
public static void main(String[] arguments) {
new ContextExample().price();
}
/**
*
*/
public void run() {
IEclipseContext parent = EclipseContextFactory.create();
parent.set("complement", new ComplementaryColor());
IEclipseContext context = parent.createChild();
context.set("color", Color.YELLOW);
Crayon crayon = new Crayon();
ContextInjectionFactory.inject(crayon, context);
crayon.draw();
}
public void runWithService() {
BundleContext bundleContext = CoreTestsActivator.getDefault().getBundleContext();
ServiceRegistration<?> reg = bundleContext.registerService(IPaletteService.class
.getName(), new PaletteImpl(Color.BLUE), null);
IEclipseContext context = EclipseContextFactory.getServiceContext(bundleContext);
Crayon crayon = new Crayon();
ContextInjectionFactory.inject(crayon, context);
crayon.draw();
reg.unregister();
crayon.draw();
}
public void run2() {
IEclipseContext parent = EclipseContextFactory.create();
parent.set("complement", new ComplementaryColor());
IEclipseContext child = parent.createChild();
child.set("color", Color.RED);
System.out.println(child.get("color"));
System.out.println(child.get("complement"));
}
public void run3() {
// IEclipseContext context = EclipseContextFactory.create();
// Object[] args = new Object[] {IResource.class};
// IResource[] resources = context.get("Selection", args);
}
double total = 0;
public void price() {
final IEclipseContext context = EclipseContextFactory.create();
context.set("price", 19.99);
context.set("tax", 0.05);
context.runAndTrack(new RunAndTrack() {
@Override
public boolean changed(IEclipseContext context) {
total = (Double) context.get("price") * (1.0 + (Double) context.get("tax"));
return true;
}
@Override
public String toString() {
return "calculator";
}
});
print(total);
context.set("tax", 0.07);
print(total);
}
private void print(double price) {
System.out.println(NumberFormat.getCurrencyInstance().format(price));
}
}