@Override
	public boolean pickAndExecuteAnAction() {
		// If a new piece of glass has been received, load the workstation and
		// process the glass
		if (!glassToProcess.isEmpty()) {
			MyGlass tempGlass = null;

			synchronized (glassToProcess) {
				for (MyGlass g : glassToProcess) {
					if (g.status == GlassStatus.RECEIVED) {
						tempGlass = g;
						break;
					}
				}
			}

			if (tempGlass != null) {
				loadGlass(tempGlass);

				if (tempGlass.isBroken) {
					removeBrokenGlass(tempGlass);
				} else {
					processGlass(tempGlass);
				}

				return true;
			}
		}

		// If a piece of glass has been processed and the popup is ready for
		// release, release the glass back to the popup
		if (!glassToProcess.isEmpty()) {
			MyGlass tempGlass = null;

			synchronized (glassToProcess) {
				for (MyGlass g : glassToProcess) {
					if (g.status == GlassStatus.WAITING_FOR_RELEASE) {
						tempGlass = g;
						break;
					}
				}
			}

			if (tempGlass != null) {
				releaseGlassToPopup(tempGlass);
				return true;
			}
		}

		// No scheduler rules match
		return false;
	}