TYPO3: tt_content über cObj holen, auch als Viewhelper

So, jetzt wird es mal langsam Zeit auch die anderen Kategorien zu füllen. Dieses mal ist es nur ein kurzer Snippet um über das cObj Elemente aus der tt_content zu ziehen.

<?php
$cConf = array(
 'tables' => 'tt_content',
 'source' => '234',	//single uid or komma separated uids
 'wrap' => '<div class="mydiv">|</div>',
 'dontCheckPid' => 1,
);

$content .= $GLOBALS['TSFE']->cObj->RECORDS($cConf);
>?

In Extbase kann das natürlich auch sehr schön über einen Viewhelper realisiert werden ;-) Als kleine Fleißaufgabe könnte man diesen erweitern um auch die wrap Funktion des RECORDS Objektes zu unterstützen.

<?php

//http://www.in2code.de/community/snippet-datenbank/snippets/detail/content-element-viewhelper-um-seiteninhalte-in-fluid-zu-rendern/?tx_in2snippets_pi1%5Bcontroller%5D=Snippet&cHash=d2f09c6efd1f4f244f295418f241a25d

/**
 * Shows Content Element
 *
 * @package TYPO3
 * @subpackage Fluid
 */
class Tx_Powermail_ViewHelpers_ContentElementViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {

	/**
	 * @var Tx_Extbase_Configuration_ConfigurationManagerInterface
	 */
	protected $configurationManager;

	/**
	 * @var Content Object
	 */
	protected $cObj;

    /**
     * Parse a content element
     *
	 * @param	int			UID of any content element
     * @return 	string		Parsed Content Element
     */
    public function render($uid) {
		$conf = array( // config
			'tables' => 'tt_content',
			'source' => $uid,
			'dontCheckPid' => 1
		);
		return $this->cObj->RECORDS($conf);
    }

	/**
	 * Injects the Configuration Manager
	 *
	 * @param Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager
	 * @return void
	*/
	public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
		$this->configurationManager = $configurationManager;
		$this->cObj = $this->configurationManager->getContentObject();
	}

}

/*aufruf in fluid template mit

<!-- FLUID: Render Content Element with uid 123 -->
<vh:ContentElement uid="123" />

*/

?>

JavaScript: OOP in JS mit Namespace und simple inheritance

So, und in diesem Snippet geht es noch einen Schritt weiter. Der Unterschied zum letzten JS Post ist die Verwendung der Simple inheritance von John Resig.

Diese vereinfacht die Schreibweise und macht den Code übersichtlicher und strukturierter. Auch die Verwendung von prototype entfällt komplett.

In der Quintus HTML5 game engine wurde dieses Konzept noch ein klein wenig weiter getrieben, diesem werde ich aber hoffentlich bald auf die Schliche kommen, da ich dieses im Moment noch nicht ganz verstehe ;-)

/* Simple JavaScript Inheritance
 * By John Resig http://ejohn.org/
 * MIT Licensed.
 */
// Inspired by base2 and Prototype
(function(){
    var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
    // The base Class implementation (does nothing)
    this.Class = function(){};

    // Create a new Class that inherits from this class
    Class.extend = function(prop) {
        var _super = this.prototype;

        // Instantiate a base class (but only create the instance,
        // don't run the init constructor)
        initializing = true;
        var prototype = new this();
        initializing = false;

        // Copy the properties over onto the new prototype
        for (var name in prop) {
            // Check if we're overwriting an existing function
            prototype[name] = typeof prop[name] == "function" &&
                typeof _super[name] == "function" && fnTest.test(prop[name]) ?
                (function(name, fn){
                return function() {
                    var tmp = this._super;

                    // Add a new ._super() method that is the same method
                    // but on the super-class
                    this._super = _super[name];

                    // The method only need to be bound temporarily, so we
                    // remove it when we're done executing
                    var ret = fn.apply(this, arguments);
                    this._super = tmp;

                    return ret;
                };
            })(name, prop[name]) :
                prop[name];
        }

        // The dummy class constructor
        function Class() {
            // All construction is actually done in the init method
            if ( !initializing && this.init )
                this.init.apply(this, arguments);
        }

        // Populate our constructed prototype object
        Class.prototype = prototype;

        // Enforce the constructor to be what we expect
        Class.prototype.constructor = Class;

        // And make this class extendable
        Class.extend = arguments.callee;

        return Class;
    };
})();

//Namespace
var TEST = TEST || { version: 1 }

//Object 1
TEST.MyObject = Class.extend({
    init: function(val){
        this.property1 = val
    },
    method1: function(){
        console.log('method1 parent called')
    }
})

//Object 2
TEST.MyObject2 = TEST.MyObject.extend({
    init: function(val){
        this._super(val) //call super class constructor
        this.property2 = 2
    },
    method1: function(){
        this._super() //call parent method1
        console.log('method1 child called')
    }
})

JavaScript: OOP in JS mit Namespace

Im letzten JavaScript Post habe ich die Objektorientierung gestreift. Doch wie werden Objekte in einem Namespace bzw. einem über Objekt zusammengefasst?

Folgender kleiner Snippet soll dieses veranschaulichen. In diesem werden zwei Klassen zusammen gefasst. Auch hier wird wieder gezeigt wie man den Konstruktor oder Methoden der Elternklasse aufruft.

//Namespace
var TEST = TEST || { version: 1 }

//Object 1
TEST.MyObject = function (){
    this.property1 = 1
    console.log('obj1')
    return this
}
//leider kann hier der constructor nicht richtig gesetzt werden
//in der Konsole erscheint beim log immer object als Konstruktorname ;o(
//TEST.MyObject.prototype.constructor = TEST.MyObject
TEST.MyObject.prototype.method1 = function () {
    console.log('method1 called')
    return 'method1'
}

//Object2
TEST.MyObject2 = function(){
    TEST.MyObject.call(this) //call super class constructor
    this.property2 = 2
    console.log('obj2')
    return this
}
//inherit from prototype
TEST.MyObject2.prototype = Object.create(TEST.MyObject.prototype)
//TEST.MyObject2.prototype.constructor = TEST.MyObject2
TEST.MyObject2.prototype.method2 = function(){
    TEST.MyObject.prototype.method1.call(this)
    console.log('method2 called')
}

Javascript: OOP mit Javascript

Lange war Javascript für mich eine Skriptsprache die nur nebenbei fast unbemerkt im Browser lief. Bei einem kleinen Canvas Projekt (cangaja), das man ja mit Javascript programmieren muss, habe ich mich erst tiefer mit Javascript beschäftigt.

Und ich musste feststellen das Javascript unterschätzt wird (JavaScript: The World’s Most Misunderstood Programming Language). Diese Programmiersprache IST objektorientiert, vielleicht nicht komplett im Sinne von Java oder anderen streng typisierten OOP Sprachen.

Javascript ist in manchen Dingen genau das Gegenteil, aber die Grundzüge von OOP sind enthalten und ich habe für mich entschieden dass ich gut damit leben kann ;-)

Im Internet gibt es sehr gute Quellen dazu (Superclassy Inheritance In JavascriptSimple JavaScript Inheritance, usw.), wenn man ein bisschen sucht wird man schon fündig.

Aber die Entwicklung bleibt auch hier nicht stehen, wer kurz einen Blick in Kapitel 9.8 Objektorientierung in ECMAScript5 von „JavaScript Das umfassende Referenzwerk“ geworfen hat, weiß was die Uhr geschlagen hat ;-)

So nun genug geschrieben, jetzt müssen Snippets her, für mein schlechtes Gedächtnis. Und am besten noch nicht im ECMAScript5 style, der ist mir nämlich noch ein wenig zu hoch.

Folgend sind nun drei kleine Beispiele die fast ähnlich sind, aber sehr gut veranschaulichen wie OOP mit Vererbung in JS realisiert werden kann.

function ClassA(val) {
	this.val = val
}
ClassA.prototype.getValA = function () {
	return this.val + ' bar';
}

ClassB.prototype = new ClassA()
ClassB.prototype.constructor = ClassB
function ClassB(val) {
	//call Superclass constructor
	ClassA.call(this, val)
}
ClassB.prototype.getValA = function () {
	//call Superclass method
	return ClassA.prototype.getValA.call(this)
}
ClassB.prototype.getValB = function () {
	//call Superclass method
	return this.val
}

x = new ClassB('foo')
x.getValA() //foo bar
x.getValB() //foo

Im zweiten Beispiel ist die Eigenschaft parent die auf den prototype der Elternklasse zeigt.

function ClassA(val) {
	this.val = val
}
ClassA.prototype.getValA = function () {
	return this.val + ' bar';
}

ClassB.prototype = new ClassA()
ClassB.prototype.constructor = ClassB
ClassB.prototype.parent = ClassA.prototype //own 'super' property

function ClassB(val) {
	//call Superclass constructor
	ClassA.call(this, val)
}
ClassB.prototype.getValA = function () {
	//call Superclass method
	return this.parent.getValA.call(this)
}
ClassB.prototype.getValB = function () {
	//call Superclass method
	return this.val
}

x = new ClassB('foo')
x.getValA() //foo bar
x.getValB() //foo

Wieder nur eine kleine Änderung, die Objekterzeugung über Object.create().

function ClassA(val) {
	this.val = val
}
ClassA.prototype.getValA = function () {
		return this.val + ' bar';
}

ClassB.prototype = Object.create(ClassA.prototype) //object creation the new style
ClassB.prototype.constructor = ClassB
ClassB.prototype.parent = ClassA.prototype //own 'super' property

function ClassB(val) {
	//call Superclass constructor
	ClassA.call(this, val)
}
ClassB.prototype.getValA = function () {
	//call Superclass method
	return this.parent.getValA.call(this)
}
ClassB.prototype.getValB = function () {
	//call Superclass method
	return this.val
}

x = new ClassB('foo')
x.getValA() //foo bar
x.getValB() //foo

Javascript: Ferientermine für den jQuery UI Datepicker

Der jQuery UI Datepicker ist eine feine Sache. Nur manchmal möchte man weitere Informationen zu den jeweiligen Tagen anzeigen.

Wenn der Datepicker initialisiert wird kann dies über die Option „beforeShowDay“ erledigt werden.

var Datepicker = {
    options: {
        dateFormat: 'yy-mm-dd',
        defaultDate: +7,
        duration: 'fast',
        numberOfMonths: 2,
        showButtonPanel: true,
        monthNames: Translation[L].monthNames,
        monthNamesShort: Translation[L].monthNamesShort,
        dayNames: Translation[L].dayNames,
        dayNamesMin: Translation[L].dayNamesMin,
        dayNamesShort: Translation[L].dayNamesShort,
        nextText: Translation[L].nextText,
        prevText: Translation[L].prevText,
        closeText: Translation[L].closeText,
        currentText: Translation[L].currentText,
        beforeShowDay: function(date){
          label = ''
          regions = HD.getAllRegionNamesForDate(date)
          if (regions.length > 0) {
            label = 'Schulferien in: ' + regions.join(', ')
          }
          if(date.getDay()==1){
            return [true,"", label];
          } else {
            return [false,"", label];
          }
        },
      beforeShow: function () {
      }
    }
}

Innerhalb dieses Events kann jeder einzelne Tag beeinflusst werden. Als Eingangsargument wird das aktuelle Date Object übergeben.

Im zurück gegebenen Array wird die Darstellung des Tages gesteuert:

[
  true/false, // Tag auswählbar ja/naei
  'classname',  // zusätzliche CSS Klasse zum stylen
  'titletext'  // zusätzlicher title Text
]

Folgend noch das kleine Snippet für die Ferientermine in Deutschland. Natürlich kann man die HD (Holiday) Klasse um eigene Methoden erweitern. Alle Angaben ohne Gewähr ;-)

/**
 * @author Christian Sonntag <xxx@xxx.de>
 * @description mini class for holidays ;o)
 * @param {string} from date as string 'yyyy-mm-dd'
 * @param {string} to date as string 'yyyy-mm-dd'
 * @param {string} text of holidy season
 */

function Holiday(from, to, text) {
	//    this.from = this.parseISO8601(from)
	//    this.to = this.parseISO8601(to)
	this.from = $.datepicker.parseDate('yy-mm-dd', from)
	this.to = $.datepicker.parseDate('yy-mm-dd', to)
	this.text = text

}
/**
 * for ancient browsers or use jquery dateParser see constructor
 */
Holiday.prototype.parseISO8601 = function(dateStringInRange) {
	var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
		date = new Date(NaN),
		month,
		parts = isoExp.exec(dateStringInRange);

	if (parts) {
		month = +parts[2];
		date.setFullYear(parts[1], month - 1, parts[3]);
		if (month != date.getMonth() + 1) {
			date.setTime(NaN);
		}
	}
	return date;
}

/**
 * @author Christian Sonntag <xxx@xxx.de>
 *
 * Ferientermine Deutschland
 * http://www.schnelle-online.info/
 * http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/
 */
var HD = {
	/**
	 * @params {date} date object
	 * @return {array} all region names found for given date
	 */
	getAllRegionNamesForDate: function(date) {
		names = []
		for (var i = 0, l = HD.regions.length; i < l; i++) {
			holidays = HD.regions[i].holidays
			for (var j = 0, m = holidays.length; j < m; j++) {
				holiday = holidays[j]
				if (holiday.from <= date && holiday.to >= date) {
					names.push(HD.regions[i].region)
				}
			}
		}
		return names
	},
	/**
	 * @params {date} date object
	 * @return {string} returns the holyday name
	 */
	getHolydayname: function(date) {
		name = ''
		for (var i = 0, l = HD.regions.length; i < l; i++) {
			if (HD.regions[i].code == Search.holiday) {
				holidays = HD.regions[i].holidays
				for (var j = 0, m = holidays.length; j < m; j++) {
					holiday = holidays[j]
					if (holiday.from <= date && holiday.to >= date) {
						name = holiday.text
					}
				}
			}
		}
		return name
	},

	regions: [{
		code: 'BW',
		region: 'Baden-Württemberg',
		holidays: [
		new Holiday("2012-07-26", "2012-09-08", "Sommerferien 2012"),
		new Holiday("2012-10-29", "2012-11-02", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-13", "Osterferien 2012"),
		new Holiday("2012-05-29", "2012-06-09", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-07-25", "2013-09-07", "Sommerferien 2013"),
		new Holiday("2013-10-28", "2013-10-30", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-05", "Osterferien 2013"),
		new Holiday("2013-05-21", "2013-06-01", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-04", "Weihnachtsferien 2013"),
		new Holiday("2014-07-31", "2014-09-13", "Sommerferien 2014"),
		new Holiday("2014-10-27", "2014-10-30", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-25", "Osterferien 2014"),
		new Holiday("2014-06-10", "2014-06-21", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-05", "Weihnachtsferien 2014")]
	}, {
		code: 'BY',
		region: 'Bayern',
		holidays: [
		new Holiday("2012-02-20", "2012-02-24", "Winterferien 2012"),
		new Holiday("2012-08-01", "2012-09-12", "Sommerferien 2012"),
		new Holiday("2012-10-29", "2012-11-03", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-05-29", "2012-06-09", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-02-11", "2013-02-15", "Winterferien 2013"),
		new Holiday("2013-07-31", "2013-09-11", "Sommerferien 2013"),
		new Holiday("2013-10-28", "2013-10-31", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-05-21", "2013-05-31", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-04", "Weihnachtsferien 2013"),
		new Holiday("2014-03-03", "2014-03-07", "Winterferien 2014"),
		new Holiday("2014-07-30", "2014-09-15", "Sommerferien 2014"),
		new Holiday("2014-10-27", "2014-10-31", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-06-10", "2014-06-21", "Pfingstferien 2014"),
		new Holiday("2014-12-24", "2015-01-05", "Weihnachtsferien 2014")]

	}, {
		code: 'BE',
		region: 'Berlin',
		holidays: [
		new Holiday("2012-01-30", "2012-02-04", "Winterferien 2012"),
		new Holiday("2012-06-20", "2012-08-03", "Sommerferien 2012"),
		new Holiday("2012-10-01", "2012-10-13", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-18", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-02-04", "2013-02-09", "Winterferien 2013"),
		new Holiday("2013-06-19", "2013-08-02", "Sommerferien 2013"),
		new Holiday("2013-09-30", "2013-10-12", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-02-03", "2014-02-08", "Winterferien 2014"),
		new Holiday("2014-07-09", "2014-08-22", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-11-01", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-05-30", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'BB',
		region: 'Brandenburg',
		holidays: [
		new Holiday("2012-01-30", "2012-02-04", "Winterferien 2012"),
		new Holiday("2012-06-21", "2012-08-03", "Sommerferien 2012"),
		new Holiday("2012-10-01", "2012-10-13", "Herbstferien 2012"),
		new Holiday("2012-01-30", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-18", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-02-04", "2013-02-09", "Winterferien 2013"),
		new Holiday("2013-06-20", "2013-08-02", "Sommerferien 2013"),
		new Holiday("2013-09-30", "2013-10-12", "Herbstferien 2013"),
		new Holiday("2013-03-27", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-02-03", "2014-02-08", "Winterferien 2014"),
		new Holiday("2014-07-10", "2014-08-22", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-11-01", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-05-30", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'HB',
		region: 'Bremen',
		holidays: [
		new Holiday("2012-01-30", "2012-01-31", "Winterferien 2012"),
		new Holiday("2012-07-23", "2012-08-31", "Sommerferien 2012"),
		new Holiday("2012-10-22", "2012-11-03", "Herbstferien 2012"),
		new Holiday("2012-03-26", "2012-04-11", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-18", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-01-31", "2013-02-01", "Winterferien 2013"),
		new Holiday("2013-06-27", "2013-08-07", "Sommerferien 2013"),
		new Holiday("2013-10-04", "2013-10-18", "Herbstferien 2013"),
		new Holiday("2013-03-16", "2013-04-02", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-01-30", "2014-01-31", "Winterferien 2014"),
		new Holiday("2014-07-31", "2014-09-10", "Sommerferien 2014"),
		new Holiday("2014-10-27", "2014-11-08", "Herbstferien 2014"),
		new Holiday("2014-04-03", "2014-04-22", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-05-30", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-05", "Weihnachtsferien 2014")]
	}, {
		code: 'HH',
		region: 'Hamburg',
		holidays: [
		new Holiday("2012-01-30", "2012-01-30", "Winterferien 2012"),
		new Holiday("2012-06-21", "2012-08-01", "Sommerferien 2012"),
		new Holiday("2012-10-01", "2012-10-12", "Herbstferien 2012"),
		new Holiday("2012-03-05", "2012-03-16", "Osterferien 2012"),
		new Holiday("2012-04-30", "2012-05-04", "Pfingstferien 2012"),
		new Holiday("2012-12-21", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-02-01", "2013-02-01", "Winterferien 2013"),
		new Holiday("2013-06-20", "2013-07-31", "Sommerferien 2013"),
		new Holiday("2013-09-30", "2013-10-11", "Herbstferien 2013"),
		new Holiday("2013-03-04", "2013-03-15", "Osterferien 2013"),
		new Holiday("2013-05-02", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-19", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-01-31", "2014-01-31", "Winterferien 2014"),
		new Holiday("2014-07-10", "2014-08-20", "Sommerferien 2014"),
		new Holiday("2014-10-13", "2014-10-24", "Herbstferien 2014"),
		new Holiday("2014-03-03", "2014-03-14", "Osterferien 2014"),
		new Holiday("2014-03-14", "2014-05-02", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'HE',
		region: 'Hessen',
		holidays: [
		new Holiday("2012-07-02", "2012-08-10", "Sommerferien 2012"),
		new Holiday("2012-10-15", "2012-10-27", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-12-24", "2013-01-12", "Weihnachtsferien 2012"),
		new Holiday("2013-07-08", "2013-08-16", "Sommerferien 2013"),
		new Holiday("2013-10-14", "2013-10-26", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-12-23", "2014-01-11", "Weihnachtsferien 2013"),
		new Holiday("2014-07-28", "2014-09-05", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-11-01", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-12-22", "2015-01-12", "Weihnachtsferien 2014")]
	}, {
		code: 'MV',
		region: 'Mecklenburg-Vorpommern',
		holidays: [
		new Holiday("2012-02-06", "2012-02-17", "Winterferien 2012"),
		new Holiday("2012-06-23", "2012-08-04", "Sommerferien 2012"),
		new Holiday("2012-10-01", "2012-10-05", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-11", "Osterferien 2012"),
		new Holiday("2012-05-25", "2012-05-29", "Pfingstferien 2012"),
		new Holiday("2012-12-21", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-02-04", "2013-02-15", "Winterferien 2013"),
		new Holiday("2013-06-22", "2013-08-03", "Sommerferien 2013"),
		new Holiday("2013-10-14", "2013-10-19", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-03", "Osterferien 2013"),
		new Holiday("2013-05-17", "2013-05-21", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-02-03", "2014-02-15", "Winterferien 2014"),
		new Holiday("2014-07-14", "2014-08-23", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-10-25", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-23", "Osterferien 2014"),
		new Holiday("2014-06-06", "2014-06-10", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'NI',
		region: 'Niedersachsen',
		holidays: [
		new Holiday("2012-01-30", "2012-01-31", "Winterferien 2012"),
		new Holiday("2012-07-23", "2012-08-31", "Sommerferien 2012"),
		new Holiday("2012-10-22", "2012-11-03", "Herbstferien 2012"),
		new Holiday("2012-03-26", "2012-04-11", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-18", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-01-31", "2013-02-01", "Winterferien 2013"),
		new Holiday("2013-06-27", "2013-08-07", "Sommerferien 2013"),
		new Holiday("2013-10-04", "2013-10-18", "Herbstferien 2013"),
		new Holiday("2013-03-16", "2013-04-02", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-01-30", "2014-01-31", "Winterferien 2014"),
		new Holiday("2014-07-31", "2014-09-10", "Sommerferien 2014"),
		new Holiday("2014-10-27", "2014-11-08", "Herbstferien 2014"),
		new Holiday("2014-04-03", "2014-04-22", "Osterferien 2014"),
		new Holiday("2014-06-10", "2014-06-10", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-05", "Weihnachtsferien 2014")]
	}, {
		code: 'NW',
		region: 'Nordrhein-Westfalen',
		holidays: [
		new Holiday("2012-07-09", "2012-08-21", "Sommerferien 2012"),
		new Holiday("2012-10-08", "2012-10-20", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-05-29", "2012-05-29", "Pfingstferien 2012"),
		new Holiday("2012-12-21", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-07-22", "2013-09-03", "Sommerferien 2013"),
		new Holiday("2013-10-21", "2013-11-02", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-05-21", "2013-05-21", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-07", "Weihnachtsferien 2013"),
		new Holiday("2014-07-07", "2014-08-19", "Sommerferien 2014"),
		new Holiday("2014-10-06", "2014-10-18", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-06-10", "2014-06-10", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'PR',
		region: 'Rheinland-Pfalz',
		holidays: [
		new Holiday("2012-07-02", "2012-08-10", "Sommerferien 2012"),
		new Holiday("2012-10-01", "2012-10-12", "Herbstferien 2012"),
		new Holiday("2012-03-29", "2012-04-13", "Osterferien 2012"),
		new Holiday("2012-12-20", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-07-08", "2013-08-16", "Sommerferien 2013"),
		new Holiday("2013-10-04", "2013-10-18", "Herbstferien 2013"),
		new Holiday("2013-03-20", "2013-04-05", "Osterferien 2013"),
		new Holiday("2013-12-23", "2014-01-07", "Weihnachtsferien 2013"),
		new Holiday("2014-07-28", "2014-09-05", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-10-31", "Herbstferien 2014"),
		new Holiday("2014-04-11", "2014-04-25", "Osterferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'SL',
		region: 'Saarland',
		holidays: [
		new Holiday("2012-02-20", "2012-02-25", "Winterferien 2012"),
		new Holiday("2012-07-02", "2012-08-14", "Sommerferien 2012"),
		new Holiday("2012-10-22", "2012-11-03", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-02-11", "2013-02-16", "Winterferien 2013"),
		new Holiday("2013-07-08", "2013-08-17", "Sommerferien 2013"),
		new Holiday("2013-10-21", "2013-11-02", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-12-20", "2014-01-04", "Weihnachtsferien 2013"),
		new Holiday("2014-03-03", "2014-03-08", "Winterferien 2014"),
		new Holiday("2014-07-28", "2014-09-06", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-10-31", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-12-22", "2015-01-05", "Weihnachtsferien 2014")]
	}, {
		code: 'SN',
		region: 'Sachsen',
		holidays: [
		new Holiday("2012-02-13", "2012-02-25", "Winterferien 2012"),
		new Holiday("2012-07-23", "2012-08-31", "Sommerferien 2012"),
		new Holiday("2012-10-22", "2012-11-02", "Herbstferien 2012"),
		new Holiday("2012-04-06", "2012-04-14", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-18", "Pfingstferien 2012"),
		new Holiday("2012-12-22", "2013-01-02", "Weihnachtsferien 2012"),
		new Holiday("2013-02-04", "2013-02-15", "Winterferien 2013"),
		new Holiday("2013-07-15", "2013-08-23", "Sommerferien 2013"),
		new Holiday("2013-10-21", "2013-11-01", "Herbstferien 2013"),
		new Holiday("2013-03-29", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-05-18", "2013-05-22", "Pfingstferien 2013"),
		new Holiday("2013-12-21", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-02-17", "2014-03-01", "Winterferien 2014"),
		new Holiday("2014-07-21", "2014-08-29", "Sommerferien 2014"),
		new Holiday("2014-10-20", "2014-10-31", "Herbstferien 2014"),
		new Holiday("2014-04-18", "2014-04-26", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-05-30", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-02", "Weihnachtsferien 2014")

		]
	}, {
		code: 'ST',
		region: 'Sachsen-Anhalt',
		holidays: [
		new Holiday("2012-02-04", "2012-02-11", "Winterferien 2012"),
		new Holiday("2012-07-23", "2012-09-05", "Sommerferien 2012"),
		new Holiday("2012-10-29", "2012-11-02", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-07", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-25", "Pfingstferien 2012"),
		new Holiday("2012-12-19", "2013-01-04", "Weihnachtsferien 2012"),
		new Holiday("2013-02-01", "2013-02-08", "Winterferien 2013"),
		new Holiday("2013-07-15", "2013-08-28", "Sommerferien 2013"),
		new Holiday("2013-10-21", "2013-10-25", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-03-30", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-18", "Pfingstferien 2013"),
		new Holiday("2013-12-21", "2014-01-03", "Weihnachtsferien 2013"),
		new Holiday("2014-02-01", "2014-02-12", "Winterferien 2014"),
		new Holiday("2014-07-21", "2014-09-03", "Sommerferien 2014"),
		new Holiday("2014-10-27", "2014-10-30", "Herbstferien 2014"),
		new Holiday("2014-04-14", "2014-04-17", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-06-07", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-04", "Weihnachtsferien 2014")]
	}, {
		code: 'SH',
		region: 'Schleswig-Holstein',
		holidays: [
		new Holiday("2012-06-25", "2012-08-04", "Sommerferien 2012"),
		new Holiday("2012-10-04", "2012-10-19", "Herbstferien 2012"),
		new Holiday("2012-03-30", "2012-04-13", "Osterferien 2012"),
		new Holiday("2012-05-18", "2012-05-18", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-06-24", "2013-08-03", "Sommerferien 2013"),
		new Holiday("2013-10-04", "2013-10-18", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-09", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-06", "Weihnachtsferien 2013"),
		new Holiday("2014-07-14", "2014-08-23", "Sommerferien 2014"),
		new Holiday("2014-10-13", "2014-10-25", "Herbstferien 2014"),
		new Holiday("2014-04-16", "2014-05-02", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-05-30", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-05", "Weihnachtsferien 2014")]
	}, {
		code: 'TH',
		region: 'Thüringen',
		holidays: [
		new Holiday("2012-02-06", "2012-02-11", "Winterferien 2012"),
		new Holiday("2012-07-23", "2012-08-31", "Sommerferien 2012"),
		new Holiday("2012-10-22", "2012-11-03", "Herbstferien 2012"),
		new Holiday("2012-04-02", "2012-04-13", "Osterferien 2012"),
		new Holiday("2012-05-25", "2012-05-29", "Pfingstferien 2012"),
		new Holiday("2012-12-24", "2013-01-05", "Weihnachtsferien 2012"),
		new Holiday("2013-02-18", "2013-02-23", "Winterferien 2013"),
		new Holiday("2013-07-15", "2013-08-23", "Sommerferien 2013"),
		new Holiday("2013-10-21", "2013-11-02", "Herbstferien 2013"),
		new Holiday("2013-03-25", "2013-04-06", "Osterferien 2013"),
		new Holiday("2013-05-10", "2013-05-10", "Pfingstferien 2013"),
		new Holiday("2013-12-23", "2014-01-04", "Weihnachtsferien 2013"),
		new Holiday("2014-02-17", "2014-02-22", "Winterferien 2014"),
		new Holiday("2014-07-21", "2014-08-29", "Sommerferien 2014"),
		new Holiday("2014-10-06", "2014-10-18", "Herbstferien 2014"),
		new Holiday("2014-04-19", "2014-05-02", "Osterferien 2014"),
		new Holiday("2014-05-30", "2014-05-30", "Pfingstferien 2014"),
		new Holiday("2014-12-22", "2015-01-05", "Weihnachtsferien 2014")

		]
	}]
}

Monkey: Target Android

Monkey ist einfach genial. Nach erfolgreichen probieren der HTML5 und iOS Targets wollte ich mal etwas über den Tellerrand zu Android schauen.

Ein Android Target mit Monkey zu erzeugen ist ja kein Problem. Aber was wird alles benötigt um für Android zu entwickeln? Zu aller erst organisiert man sich das Android SDK für die entsprechende Plattform. In meinem Fall war es für Mac OS X (intel).

So weit so gut, was kommt als nächstes. Unter OS X muss in dem Android SDK Ordner „tools“ das Kommandozeilenprogramm „android“ gestartet werden. Es erscheint dann der „Android SDK and AVD Manager“. Nun lädtman sich im nächsten Schritt die gewünschte Android SDK Platform.

Ist das erledigt ist es ratsam unter „Virtual devices“ ein AVD anzulegen. Dieses stellt dann einen Android Simulator zur Verfügung. Die ersten Weichen sind gestellt.

Monkey & Netbeans

Das SDK ist eingerichtet, Monkey hat ein Android Target Projekt erzeugt, aber was nun? Nach ein wenig suche, wenn man die bekannten Java IDE’s abklappert, wird man bei Netbeans fündig (wenn ich ehrlich bin habe ich nur nach Netbeans gesucht).

Für die Netbeans IDE gibt es das „nbandroid“ Plugin. Dieses steht nicht selbst über das Netbeans Repository zur Verfügung. Um dieses zu installieren muss im „Plugins Fenster“ unter „Settings“ eine weitere Update Center Quelle angelegt werden. Dies wird hier sehr gut beschrieben.

Nach erfolgreicher installation kann man direkt aus Netbeans heraus Android Projekte erzeugen/starten, compilieren, usw.

Monkey hat dies aber schon erledigt und Netbeans muss nicht mehr dazu bemüht werden. Netbeans wird jetzt dazu gebraucht das Android Target zu kompilieren und entweder auf ein echtes oder auf ein simuliertes Device zu kopieren.

Und schon steckt man ganz tief in der Welt von Android und Java ;o) Bei meinen ersten Versuchen war ich bis jetzt noch nicht erfolgreich mein Monkey Projekt unter Android zum laufen zu bewegen, snif.