text:
package com.impetus.client.hbase.crud.datatypes;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.impetus.client.hbase.crud.datatypes.entities.StudentHBaseShortWrapper;

/**
 * The Class StudentHBaseShortWrapperTest.
 *
 * @author Devender Yadav
 */
public class StudentHBaseShortWrapperTest extends Base
{

    /** The Constant HBASE_PU. */
    private static final String HBASE_PU = "dataTypeTest";

    /** The emf. */
    private static EntityManagerFactory emf;

    /**
     * Sets the up before class.
     *
     * @throws Exception
     *             the exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception
    {
        emf = Persistence.createEntityManagerFactory(HBASE_PU);
    }

    /**
     * Tear down after class.
     *
     * @throws Exception
     *             the exception
     */
    @AfterClass
    public static void tearDownAfterClass() throws Exception
    {
        emf.close();
        emf = null;

    }

    /**
     * Test execute use same em.
     */
    @Test
    public void testExecuteUseSameEm()
    {
        persistStudents();
        testFindById(true);
        testMerge(true);
        testFindByQuery(true);
        testNamedQueryUseSameEm(true);
        testDelete(true);
    }

    /**
     * Test execute.
     */
    @Test
    public void testExecute()
    {
        persistStudents();
        testFindById(false);
        testMerge(false);
        testFindByQuery(false);
        testNamedQuery(false);
        testDelete(false);
    }

    /**
     * Persist students.
     */
    public void persistStudents()
    {
        EntityManager em = emf.createEntityManager();

        // Insert max value of Short
        StudentHBaseShortWrapper studentMax = new StudentHBaseShortWrapper();
        studentMax.setAge((Short) getMaxValue(short.class));
        studentMax.setId((Short) getMaxValue(Short.class));
        studentMax.setName((String) getMaxValue(String.class));
        em.persist(studentMax);

        // Insert min value of Short
        StudentHBaseShortWrapper studentMin = new StudentHBaseShortWrapper();
        studentMin.setAge((Short) getPartialValue(short.class));
        studentMin.setId((Short) getPartialValue(short.class));
        studentMin.setName((String) getMinValue(String.class));
        em.persist(studentMin);

        // Insert random value of Short
        StudentHBaseShortWrapper student = new StudentHBaseShortWrapper();
        student.setAge((Short) getRandomValue(short.class));
        student.setId((Short) getRandomValue(Short.class));
        student.setName((String) getRandomValue(String.class));
        em.persist(student);
        em.close();
    }

    /**
     * Test find by id.
     *
     * @param useSameEm
     *            the use same em
     */
    public void testFindById(boolean useSameEm)
    {
        EntityManager em = emf.createEntityManager();

        StudentHBaseShortWrapper studentMax = em.find(StudentHBaseShortWrapper.class, getMaxValue(Short.class));
        Assert.assertNotNull(studentMax);
        Assert.assertEquals(getMaxValue(short.class), studentMax.getAge());
        Assert.assertEquals(getMaxValue(String.class), studentMax.getName());

        if (!useSameEm)
        {
            em.close();
            em = emf.createEntityManager();
        }
        StudentHBaseShortWrapper studentMin = em.find(StudentHBaseShortWrapper.class, getPartialValue(short.class));
        Assert.assertNotNull(studentMin);
        Assert.assertEquals(getPartialValue(short.class), studentMin.getAge());
        Assert.assertEquals(getMinValue(String.class), studentMin.getName());

        if (!useSameEm)
        {
            em.close();
            em = emf.createEntityManager();
        }
        StudentHBaseShortWrapper student = em.find(StudentHBaseShortWrapper.class, getRandomValue(Short.class));
        Assert.assertNotNull(student);
        Assert.assertEquals(getRandomValue(short.class), student.getAge());
        Assert.assertEquals(getRandomValue(String.class), student.getName());
        em.close();
    }

    /**
     * Test merge.
     *
     * @param useSameEm
     *            the use same em
     */
    public void testMerge(boolean useSameEm)
    {
        EntityManager em = emf.createEntityManager();
        StudentHBaseShortWrapper student = em.find(StudentHBaseShortWrapper.class, getMaxValue(Short.class));
        Assert.assertNotNull(student);
        Assert.assertEquals(getMaxValue(short.class), student.getAge());
        Assert.assertEquals(getMaxValue(String.class), student.getName());

        student.setName("Kuldeep");
        em.merge(student);
        if (!useSameEm)
        {
            em.close();
            em = emf.createEntityManager();
        }
        StudentHBaseShortWrapper newStudent = em.find(StudentHBaseShortWrapper.class, getMaxValue(Short.class));
        Assert.assertNotNull(newStudent);
        Assert.assertEquals(getMaxValue(short.class), newStudent.getAge());
        Assert.assertEquals("Kuldeep", newStudent.getName());
    }

    /**
     * Test find by query.
     *
     * @param useSameEm
     *            the use same em
     */
    public void testFindByQuery(boolean useSameEm)
    {
        findAllQuery();
        findByName();
        findByAge();
        findByNameAndAgeGTAndLT();
        findByNameAndAgeGTEQAndLTEQ();
        findByNameAndAgeGTAndLTEQ();
        findByNameAndAgeWithOrClause();
        findByAgeAndNameGTAndLT();
    }

    /**
     * Find by age and name gt and lt.
     */
    private void findByAgeAndNameGTAndLT()
    {
        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.age = " + getPartialValue(short.class)
                + " and s.name > 'Amresh' and s.name <= '" + getMaxValue(String.class) + "'";
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(1, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            Assert.assertEquals(getPartialValue(short.class), student.getId());
            Assert.assertEquals(getPartialValue(short.class), student.getAge());
            Assert.assertEquals(getMinValue(String.class), student.getName());
            count++;

        }
        Assert.assertEquals(1, count);
        em.close();

    }

    /**
     * Find by name and age with or clause.
     */
    private void findByNameAndAgeWithOrClause()
    {
        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.name = 'Kuldeep' and s.age > "
                + getPartialValue(short.class);
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(1, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            Assert.assertEquals(getMaxValue(Short.class), student.getId());
            Assert.assertEquals(getMaxValue(short.class), student.getAge());
            Assert.assertEquals("Kuldeep", student.getName());
            count++;
        }
        Assert.assertEquals(1, count);
        em.close();
    }

    /**
     * Find by name and age gt and lteq.
     */
    private void findByNameAndAgeGTAndLTEQ()
    {

        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.name = 'Kuldeep' and s.age > "
                + getPartialValue(short.class) + " and s.age <= " + getMaxValue(short.class);
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(1, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            Assert.assertEquals(getMaxValue(Short.class), student.getId());
            Assert.assertEquals(getMaxValue(short.class), student.getAge());
            Assert.assertEquals("Kuldeep", student.getName());
            count++;
        }
        Assert.assertEquals(1, count);
        em.close();
    }

    /**
     * Test named query use same em.
     *
     * @param useSameEm
     *            the use same em
     */
    public void testNamedQueryUseSameEm(boolean useSameEm)
    {
        updateNamed(true);
        deleteNamed(true);
    }

    /**
     * Test named query.
     *
     * @param useSameEm
     *            the use same em
     */
    public void testNamedQuery(boolean useSameEm)
    {
        updateNamed(false);
        deleteNamed(false);
    }

    /**
     * Test delete.
     *
     * @param useSameEm
     *            the use same em
     */
    public void testDelete(boolean useSameEm)
    {
        EntityManager em = emf.createEntityManager();

        StudentHBaseShortWrapper studentMax = em.find(StudentHBaseShortWrapper.class, getMaxValue(Short.class));
        Assert.assertNotNull(studentMax);
        Assert.assertEquals(getMaxValue(short.class), studentMax.getAge());
        Assert.assertEquals("Kuldeep", studentMax.getName());
        em.remove(studentMax);
        if (!useSameEm)
        {
            em.close();
            em = emf.createEntityManager();
        }
        studentMax = em.find(StudentHBaseShortWrapper.class, getMaxValue(Short.class));
        Assert.assertNull(studentMax);
        em.close();
    }

    /**
     * Delete named.
     *
     * @param useSameEm
     *            the use same em
     */
    private void deleteNamed(boolean useSameEm)
    {

        String deleteQuery = "Delete From StudentHBaseShortWrapper s where s.name='Vivek'";
        EntityManager em = emf.createEntityManager();
        Query q = em.createQuery(deleteQuery);
        q.executeUpdate();
        if (!useSameEm)
        {
            em.close();
            em = emf.createEntityManager();
        }
        StudentHBaseShortWrapper newStudent = em.find(StudentHBaseShortWrapper.class, getRandomValue(Short.class));
        Assert.assertNull(newStudent);
        em.close();
    }

    /**
     * Update named.
     *
     * @param useSameEm
     *            the use same em
     */
    private void updateNamed(boolean useSameEm)
    {
        EntityManager em = emf.createEntityManager();
        String updateQuery = "Update StudentHBaseShortWrapper s SET s.name='Vivek' where s.name='Amresh'";
        Query q = em.createQuery(updateQuery);
        q.executeUpdate();
        if (!useSameEm)
        {
            em.close();
            em = emf.createEntityManager();
        }
        StudentHBaseShortWrapper newStudent = em.find(StudentHBaseShortWrapper.class, getRandomValue(Short.class));
        Assert.assertNotNull(newStudent);
        Assert.assertEquals(getRandomValue(short.class), newStudent.getAge());
        Assert.assertEquals("Vivek", newStudent.getName());
        em.close();
    }

    /**
     * Find by name and age gt and lt.
     */
    private void findByNameAndAgeGTAndLT()
    {
        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.name = 'Amresh' and s.age > "
                + getPartialValue(short.class) + " and s.age < " + getMaxValue(short.class);
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(1, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            Assert.assertEquals(getRandomValue(Short.class), student.getId());
            Assert.assertEquals(getRandomValue(short.class), student.getAge());
            Assert.assertEquals(getRandomValue(String.class), student.getName());
            count++;

        }
        Assert.assertEquals(1, count);
        em.close();

    }

    /**
     * Find by name and age gteq and lteq.
     */
    private void findByNameAndAgeGTEQAndLTEQ()
    {
        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.name = 'Kuldeep' and s.age >= "
                + getPartialValue(short.class) + " and s.age <= " + getMaxValue(short.class);
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(2, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            if (student.getId().equals(getMaxValue(Short.class)))
            {
                Assert.assertEquals(getMaxValue(short.class), student.getAge());
                Assert.assertEquals("Kuldeep", student.getName());
                count++;
            }
            else
            {
                Assert.assertEquals(getPartialValue(short.class), student.getId());
                Assert.assertEquals(getPartialValue(short.class), student.getAge());
                Assert.assertEquals(getMinValue(String.class), student.getName());
                count++;
            }

        }
        Assert.assertEquals(2, count);
        em.close();

    }

    /**
     * Find by age.
     */
    private void findByAge()
    {
        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.age = " + getRandomValue(short.class);
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(1, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            Assert.assertEquals(getRandomValue(Short.class), student.getId());
            Assert.assertEquals(getRandomValue(short.class), student.getAge());
            Assert.assertEquals(getRandomValue(String.class), student.getName());
            count++;
        }
        Assert.assertEquals(1, count);
        em.close();
    }

    /**
     * Find by name.
     */
    private void findByName()
    {
        EntityManager em;
        String query;
        Query q;
        List<StudentHBaseShortWrapper> students;
        int count;
        em = emf.createEntityManager();
        query = "Select s From StudentHBaseShortWrapper s where s.name = 'Kuldeep'";
        q = em.createQuery(query);
        students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(2, students.size());
        count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            if (student.getId().equals(getMaxValue(Short.class)))
            {
                Assert.assertEquals(getMaxValue(short.class), student.getAge());
                Assert.assertEquals("Kuldeep", student.getName());
                count++;
            }
            else
            {
                Assert.assertEquals(getPartialValue(short.class), student.getId());
                Assert.assertEquals(getPartialValue(short.class), student.getAge());
                Assert.assertEquals(getMinValue(String.class), student.getName());
                count++;
            }
        }
        Assert.assertEquals(2, count);
        em.close();
    }

    /**
     * Find all query.
     */
    private void findAllQuery()
    {
        EntityManager em = emf.createEntityManager();
        // Selet all query.
        String query = "Select s From StudentHBaseShortWrapper s ";
        Query q = em.createQuery(query);
        List<StudentHBaseShortWrapper> students = q.getResultList();
        Assert.assertNotNull(students);
        Assert.assertEquals(3, students.size());
        int count = 0;
        for (StudentHBaseShortWrapper student : students)
        {
            if (student.getId().equals(getMaxValue(Short.class)))
            {
                Assert.assertEquals(getMaxValue(short.class), student.getAge());
                Assert.assertEquals("Kuldeep", student.getName());
                count++;
            }
            else if (student.getId().equals(getPartialValue(short.class)))
            {
                Assert.assertEquals(getPartialValue(short.class), student.getAge());
                Assert.assertEquals(getMinValue(String.class), student.getName());
                count++;
            }
            else
            {
                Assert.assertEquals(getRandomValue(Short.class), student.getId());
                Assert.assertEquals(getRandomValue(short.class), student.getAge());
                Assert.assertEquals(getRandomValue(String.class), student.getName());
                count++;
            }
        }
        Assert.assertEquals(3, count);
        em.close();
    }

}


text:
<?php include("../../includes/meta.php"); ?>

		<?php include("../../includes/header.php"); ?>

			Back

Education

University of Central Florida 1998 Bachelor of Science/Structural Engineering

Years with company: 10

					Total years in industry: 10

Registered In

Florida

Hawaii

Illinois

Nebraska

Carlos L. Hernandez, P.E S.E.

CEO

Carlos Hernandez is a Principal at Advanced Structural Design, Inc. with 10 years of experience in various aspects of Project Management, Engineering Design and Inspection. Carlos Hernandez is a Florida registered Structural Engineer (P.E. # 60991).

Projects

Orlando Events Center, Orlando, FL. Specialty Engineering Connection Design

Robinswood Middle School, Orange County FL.

Lee Middle School, Orange County FL.

Killarney Elementary School, Orange County FL.

Conway Elementary School, Orange County  FL.

South Lake High School  ,Lake  County FL

Stonewall Jackson Middle School , Orange County  FL.

Bonneville Elementary School, Orange County  FL.

Liberty Middle School , Orange County FL.,

Sadler Elementary School , Orange County  FL.

Shenandoah Elementary School, Orange County FL.

Gainesville Greens ,  Alachua  County FL.

The Landmark on Morse Condominium,  Winter   Park,  FL

Liberty Middle School Orange County FL.,

Sadler Elementary School Orange County FL.

South Lake High School, Lake   County,  FL

The Summer Cove Condominium Siesta Key, FL. 180,000 Sq. Ft.

Sandpiper Condominium Renovation, New Smyrna Beach, FL.

The landmark at Morse Condominium Winter Park FL.

Lakewood Ranch Office, Manatee County, FL.,

Windermere Union Church, Windermere FL.

Windermere Union Church Preschool, Windermere FL.

Northland Community Church, Longwood  FL.

Pelloni Office Building E and F,  Lake Mary, FL

College  Park Community Center, City of Orlando, Orlando, FL

Sacred Heart Church Family Life Center, New Smyrna Beach, FL.

Stetson Baptist Church Community Center, Deland, FL.

Carter Tabernacle CME Church, Orlando, FL.

Okeechobee Agri-Civic Center, Okeechobee   County,  FL.

Citrus County Judicial Facility, Citrus County, FL.

Winter Haven Police Department, Winter Haven, FL.

Orlando Skate Park @ Festival Park, City   of Orlando,  FL.

Eatonville Public Library, Eatonville, FL.

Sumter CHD Accessory Building, Bushnell, FL.

Lynx Central Station, Orange County, FL.

Celebration Office Building, Celebration, FL.

The Magnolia  Office Building, Celebration, FL.

Moss Partner Office & Retail, Orange County, FL

Pelloni Office Building E, Lake   Mary, FL

<?php include("../../includes/footer.php"); ?>

redpajama_set_name: RedPajamaGithub


text:
package synergynet.table.apps.researchpuzzle.synergycomponent;

import java.awt.Color;

import synergynet.contentsystem.ContentSystem;
import synergynet.contentsystem.items.QuadContentItem;
import synergynet.contentsystem.items.SimpleButton;
import synergynet.contentsystem.items.Window;
import synergynet.contentsystem.items.listener.SimpleButtonAdapter;
import synergynet.table.apps.researchpuzzle.ResearchPuzzleApp;
import synergynet.table.apps.researchpuzzle.synergycomponent.annotatewrapper.HighlightWrapper;
import synergynet.table.apps.researchpuzzle.synergycomponent.slicewrapper.SliceWrapper;

public class SynergyComponent{

	protected ContentSystem contentSystem;
	public static enum SynergyMode{RTS, SLICE, ANNOTATE};
	protected SynergyMode defaultSynergyMode = SynergyMode.RTS;
	protected SliceWrapper sliceWrapper;
	protected HighlightWrapper annotateWrapper;
	protected QuadContentItem quadItem;
	protected Window window;
	SimpleButton closeButton, annotateButton, cutButton;

	public SynergyComponent(QuadContentItem item){
		this(item, item);
	}

	public SynergyComponent(QuadContentItem item, QuadContentItem rootItem){
		this.contentSystem = item.getContentSystem();
		this.quadItem = item;
		window = (Window) contentSystem.createContentItem(Window.class);
		window.setLocation(quadItem.getLocation().getX(), quadItem.getLocation().getY());
		window.setWidth(quadItem.getWidth());
		window.setHeight(quadItem.getHeight());
		window.setAngle(quadItem.getAngle());
		window.setScale(quadItem.getScale());
		quadItem.setLocation(0, 0);
		quadItem.setAngle(0);
		quadItem.setScale(1);
		window.addSubItem(quadItem);
		sliceWrapper = new SliceWrapper(quadItem, rootItem);
		sliceWrapper.setMaxSliceDimension(quadItem.getWidth(), quadItem.getHeight());
		annotateWrapper = new HighlightWrapper(quadItem, rootItem);

		closeButton = (SimpleButton) contentSystem.createContentItem(SimpleButton.class);
		closeButton.setAutoFitSize(false);
		closeButton.setWidth(25);
		closeButton.setHeight(25);
		closeButton.setBackgroundColour(Color.white);
		closeButton.drawImage(ResearchPuzzleApp.class.getResource("images/close.png"),0,0,25,25);
		closeButton.addButtonListener(new SimpleButtonAdapter(){

			@Override
			public void buttonReleased(SimpleButton b, long id, float x,
					float y, float pressure) {
				if(window.getParent() == null)
					contentSystem.removeContentItem(window, false);
				else
					window.getParent().removeSubItem(window, false);
			}
		});
		closeButton.setBorderSize(2);
		closeButton.setLocalLocation(item.getWidth()/2, item.getHeight()/2);
		closeButton.setOrder(item.getOrder()+1);
		window.addSubItem(closeButton);

		annotateButton = (SimpleButton) contentSystem.createContentItem(SimpleButton.class);
		annotateButton.setAutoFitSize(false);
		annotateButton.setWidth(25);
		annotateButton.setHeight(25);
		annotateButton.setBackgroundColour(Color.white);
		annotateButton.drawImage(ResearchPuzzleApp.class.getResource("images/draw.png"),0,0,25,25);
		annotateButton.addButtonListener(new SimpleButtonAdapter(){

			@Override
			public void buttonPressed(SimpleButton b, long id, float x,
					float y, float pressure) {
				SynergyComponent.this.setSynergyMode(SynergyMode.ANNOTATE);
			}

			@Override
			public void buttonReleased(SimpleButton b, long id, float x,
					float y, float pressure) {
				SynergyComponent.this.setSynergyMode(SynergyMode.RTS);
			}
		});
		annotateButton.setBorderSize(2);
		annotateButton.setLocalLocation(item.getWidth()/2, (item.getHeight()/2)-40);
		annotateButton.setOrder(item.getOrder()+1);
		window.addSubItem(annotateButton);

		cutButton = (SimpleButton) contentSystem.createContentItem(SimpleButton.class);
		cutButton.setAutoFitSize(false);
		cutButton.setWidth(25);
		cutButton.setHeight(25);
		cutButton.setBackgroundColour(Color.white);
		cutButton.drawImage(ResearchPuzzleApp.class.getResource("images/cut.png"),0,0,25,25);
		cutButton.addButtonListener(new SimpleButtonAdapter(){

			@Override
			public void buttonPressed(SimpleButton b, long id, float x,
					float y, float pressure) {
				SynergyComponent.this.setSynergyMode(SynergyMode.SLICE);
			}

			@Override
			public void buttonReleased(SimpleButton b, long id, float x,
					float y, float pressure) {
				SynergyComponent.this.setSynergyMode(SynergyMode.RTS);
			}
		});
		cutButton.setBorderSize(2);
		cutButton.setLocalLocation(item.getWidth()/2, (item.getHeight()/2)-80);
		cutButton.setOrder(item.getOrder()+1);
		window.addSubItem(cutButton);

		this.setSynergyMode(SynergyMode.RTS);
	}

	public void setSynergyMode(SynergyMode mode){
		this.defaultSynergyMode = mode;
		if(sliceWrapper != null && annotateWrapper!= null && quadItem != null){
			if(mode.equals(SynergyMode.RTS)){
				sliceWrapper.setSliceEnabled(false);
				annotateWrapper.setAnnotateEnabled(false);
				window.setRotateTranslateScalable(true);
			}else if(mode.equals(SynergyMode.SLICE)){
				sliceWrapper.setSliceEnabled(true);
				annotateWrapper.setAnnotateEnabled(false);
				window.setRotateTranslateScalable(false);
				closeButton.setRotateTranslateScalable(true);
				annotateButton.setRotateTranslateScalable(true);
				cutButton.setRotateTranslateScalable(true);

			}else if(mode.equals(SynergyMode.ANNOTATE)){
				sliceWrapper.setSliceEnabled(false);
				annotateWrapper.setAnnotateEnabled(true);
				window.setRotateTranslateScalable(false);
				closeButton.setRotateTranslateScalable(true);
				annotateButton.setRotateTranslateScalable(true);
				cutButton.setRotateTranslateScalable(true);
			}
		}
	}

	public SynergyMode getSynergyMode(){
		return this.defaultSynergyMode;
	}

	public Window getContainer(){
		return window;
	}
}


text:
define({
  "viewer": {
    "loading": {
      "step1": "STORY WIRD GELADEN",
      "step2": "DATEN WERDEN GELADEN",
      "step3": "TOUR WIRD INITIALISIERT",
      "loadBuilder": "ES WIRD ZUM BUILDER-MODUS GEWECHSELT",
      "redirectSignIn": "UMLEITUNG ZUR ANMELDESEITE",
      "redirectSignIn2": "(Sie werden nach der Anmeldung hierher umgeleitet)",
      "fail": "Map Tour konnte leider nicht geladen werden",
      "failButton": "Wiederholen"
    },
    "errors": {
      "boxTitle": "Ein Fehler ist aufgetreten",
      "portalSelf": "Schwerwiegender Fehler: Die Portalkonfiguration konnte nicht abgerufen werden.",
      "invalidConfig": "Schwerwiegender Fehler: Ungültige Konfiguration",
      "invalidConfigOwner": "Schwerwiegender Fehler: Ungültige Konfiguration (autorisierter Benutzer erforderlich)",
      "invalidConfigNoWebmap": "Schwerwiegender Fehler: Ungültige Konfiguration (Webkarte oder Anwendungskennung nicht in \"index.html\" angegeben)",
      "invalidConfigNoAppDev": "In den URL-Parametern (?appid= oder ?webmap=) ist keine Kennung einer Web Mapping-Anwendung und keine Webkarte angegeben. Im Entwicklungsmodus wird die appid- und webmap-Konfiguration in der Datei index.html ignoriert.",
      "createMap": "Karte kann nicht erstellt werden",
      "invalidApp": "Schwerwiegender Fehler: Die Story kann nicht geladen werden.",
      "noLayer": "Die Webkarte enthält keinen gültigen Daten-Layer für Map Tour.",
      "noLayerMobile": "Der Map Tour Builder wird bei dieser Anzeigegröße nicht unterstützt. Ändern Sie nach Möglichkeit die Browser-Größe, um auf den Builder zuzugreifen, oder erstellen Sie Ihre Story auf einem Gerät mit größerem Bildschirm.",
      "noLayerMobile2": "Halten Sie das Gerät im Querformat, wenn Sie den Map Tour Builder verwenden.",
      "noLayerView": "Willkommen bei der Webanwendung \"Map Tour\".
Die Story ist noch nicht konfiguriert.",
      "appSave": "Fehler beim Speichern der Story",
      "mapSave": "Fehler beim Speichern der Webkarte",
      "featureServiceLoad": "Fehler beim Laden des Feature-Service",
      "notAuthorized": "Sie sind nicht autorisiert, auf diese Story zuzugreifen.",
      "notAuthorizedBuilder": "Sie sind nicht autorisiert, den Map Tour Builder zu verwenden.",
      "oldBrowserTitle": "Browser wird nicht vollständig unterstützt",
      "noBuilderIE8": "Der Map Tour-Builder wird von Internet Explorer vor Version 9 nicht unterstützt.",
      "ie10Win7Explain": "Der interaktive Map Tour-Builder wird von Internet Explorer 10 unter Windows 7 nicht unterstützt, wenn es sich bei der Datenquelle um einen Feature-Service mit Anlagen handelt. Um einen Feature-Service mit Anlagen zu verwenden, müssen Sie den Dokumentmodus manuell auf Internet Explorer 9-Standards setzen, auf Internet Explorer 9 herunterstufen oder ein Upgrade auf Windows 8 durchführen.",
      "oldBrowserExplain": "Dieser Browser unterstützt keine automatische Erstellung von Miniaturansichten der Bilder, die Sie in Ihre Karten-Tour hochladen. Sie können zwar mit diesem Browser eine Map-Tour erstellen, aber Sie müssen für jedes hochgeladene Bild eine eigene Miniaturansicht bereitstellen.",
      "oldBrowserExplain2": "Um die Performance zu verbessern, führen Sie ein Browser-Upgrade durch, oder aktivieren Sie Google Chrome Frame für Internet Explorer.",
      "oldBrowserExplain3": "Der Map Tour-Builder kann nicht mit Internet Explorer 10 unter Windows XP verwendet werden.",
      "oldBrowserClose": "Schließen"
    },
    "mobileHTML": {
      "showIntro": "TITEL EINBLENDEN",
      "hideIntro": "TITEL AUSBLENDEN",
      "navList": "Liste",
      "navMap": "Karte",
      "navInfo": "Medien",
      "introStartBtn": "Start"
    },
    "desktopHTML": {
      "storymapsText": "Eine Story Map",
      "builderButton": "Zum Generator-Modus wechseln",
      "facebookTooltip": "Auf Facebook freigeben",
      "twitterTooltip": "Auf Twitter freigeben",
      "bitlyTooltip": "Kurzlink abrufen",
      "bitlyStartIndex": "Link zu aktuellem Ort",
      "tooltipAutoplayDisabled": "Dies ist im Modus für automatische Wiedergabe nicht verfügbar",
      "autoplayLabel": "Modus für automatische Wiedergabe",
      "autoplayExplain1": "Im Modus für automatische Wiedergabe wird die Story regelmäßig fortgesetzt. Er ist ideal für Kiosks oder öffentliche Monitore. In anderen Situationen wird dadurch allerdings die Lesbarkeit der Story beeinträchtigt. Dieses Feature wird für kleine Anzeigegrößen nicht unterstützt.",
      "autoplayExplain2": "Ist dieser Modus aktiviert, stehen Steuerelemente für Wiedergabe/Pause der Story und zum Einstellen der Navigationsgeschwindigkeit zur Verfügung."
    },
    "builderHTML": {
      "panelHeader": "STORY-KONFIGURATION",
      "buttonSave": "SPEICHERN",
      "buttonSettings": "Einstellungen",
      "buttonShare": "Freigeben",
      "buttonView": "Anzeigemodus",
      "buttonItem": "Webanwendungselement öffnen",
      "buttonHelp": "Hilfe",
      "buttonOrganize": "Organisieren",
      "buttonAdd": "Hinzufügen",
      "buttonImport": "Importieren",
      "buttonImportDisabled": "Bei Verwendung eines Feature-Service mit Anlagen ist die Option \"Importieren\" nicht verfügbar",
      "dataEditionDisabled": "Datenbearbeitung ist für diese CSV-Datenquelle deaktiviert",
      "dataSourceWarning": "Der Map Tour-Daten-Layer hat sich geändert. Wenn die Feature-IDs nicht übereinstimmen, müssen Sie die Reihenfolge und verborgenen Punkte durch Organisieren zurücksetzen. Wenn die Feldnamen abweichen, müssen Sie die Feldeinstellungen auf der Datenregisterkarte in den Einstellungen zurücksetzen.",
      "organizeWarning": "Ein oder mehrere außerhalb des interaktiven Builders erstellte Punkte sind ausgeblendet.",
      "dataPicError0a": "Diese Tour enthält %NB% nicht-konforme Bild-URLs.",
      "dataPicError0b": "Diese Tour könnte %NB% nicht-konforme Bild-URLs enthalten.",
      "dataPicError1": "Für Map Tour ist jetzt eine Bild-URL erforderlich, die auf eine der folgenden Erweiterungen endet: .jp(e)g, .png, .gif oder .bmp.",
      "dataPicError2": "Diese Anforderung hat keine Auswirkungen auf Ihre bereits veröffentlichte Map Tour. Um jedoch den interaktiven Builder nutzen zu können, müssen Sie zunächst eine von zwei Modifikationen an der URL vornehmen:",
      "dataPicError3": "URLs bearbeiten",
      "dataPicError4": "Hiermit wird #isImage an das Ende von nicht unterstützten Bild-URLs gehängt. URL-Anhänge werden von den meisten Servern unterstützt. Sobald Sie diese Aktion durchgeführt haben, sollten Sie allerdings mittels Navigation durch Ihre Punkte prüfen, ob die aktualisierten Bild-URLs funktionieren. Wird jedes Bild geladen, können Sie die Map Tour jetzt speichern. Sollten die Bilder nicht angezeigt werden, speichern Sie Map Tour bitte nicht. Rufen Sie stattdessen den Builder erneut auf und führen Sie die zweite Aktion durch.",
      "dataPicError5": "Die Tour auf Bilder beschränken",
      "dataPicError6": "Durch diese Option werden alle URLS als Bilder behandelt, es lassen sich jedoch keine Videos mithilfe des interaktiven Builders hinzufügen. Diese Aktion kann rückgängig gemacht werden, falls Sie künftig Videos hinzufügen möchten.",
      "dataPicError7": "Ihre Map Tour ist auf Bilder beschränkt, es können keine Videos verwendet werden. Wenn Sie diese Beschränkung aufheben wollen, vergewissern Sie sich bitte vor dem Speichern der Map Tour, ob Ihre Bilder immer noch richtig geladen werden. Sie können diese Beschränkung später bei Bedarf wiederherstellen.",
      "dataPicError8": "Beschränkung auf Bilder aufheben",
      "dataPicError9": "Verweisen diese URLs auf Videos, so können Sie diese Warnung ignorieren, sollten sie auf Bilder verweisen, müssen Sie eine der folgenden beiden Aktionen ausführen:",
      "modalCancel": "Abbrechen",
      "modalApply": "Übernehmen",
      "organizeHeader": "Tour organisieren",
      "organizeGeneralCaption": "Tour-Punkte per Drag & Drop sortieren",
      "organizeDelete": "Löschen",
      "organizeHide": "Ausblenden",
      "organizeReset": "Reihenfolge und verborgene Punkte zurücksetzen",
      "addMaxPointReached": "Sie haben die maximale Punktzahl erreicht, die für die festgelegten Symbole zulässig ist, und können keine weiteren Tourpunkte hinzufügen.

Beachten Sie, dass die Story erneut geladen werden muss, wenn Sie vorhandene Punkte löschen.",
      "addMaxPointReachedMobile": "Sie können dieses Bild leider nicht hinzufügen, da Sie die maximal zulässige Anzahl von autorisierten Punkten erreicht haben.",
      "addClose": "Schließen",
      "addHeader": "Neuen Tour-Punkt hinzufügen",
      "addTabPicture": "Medien",
      "addTabInformation": "Informationen",
      "addTabLocation": "Position",
      "addSelectCaption": "Bild auswählen oder löschen",
      "addNoteVideo": "Konsultieren Sie die Hilfe in Bezug auf Anweisungen zur Verwendung von Videos",
      "addSelectCaptionNoFileReader": "Bild auswählen",
      "addChangePhoto": "Bild und Miniaturansicht ändern",
      "addPictureResolutionIntro": "Die Bildauflösung ist höher als erforderlich:",
      "addPictureResolutionOldBrowser": "Die Bildauflösung ist höher als erforderlich. Optimieren Sie die Performance von Map Tour, indem Sie eine Auflösung von weniger als %RECOMMENDED_RES% angeben.",
      "addPictureResolutionResize": "Bildauflösung in %RESOLUTION% ändern",
      "addPictureResolutionKeep": "Ursprüngliche Auflösung von %RESOLUTION% beibehalten",
      "addSelectThumbnail": "Miniaturansicht auswählen",
      "addNoThumbSelected": "Keine Miniaturansicht ausgewählt",
      "addThumbSelected": "Ausgewählt",
      "addCameraSettingsHeader": "KAMERAEINSTELLUNGEN",
      "addThumbnailHeader": "MINIATURANSICHT",
      "addLabelPicUrl": "Bild",
      "addLabelThumbUrl": "Miniaturansicht",
      "addTextPlaceholderUrl": "Bild-URL eingeben",
      "addTextPlaceholderUrl2": "YouTube-Seiten-URL eingeben",
      "addTextPlaceholderUrl3": "Videoseiten-URL eingeben",
      "addTextPlaceholderUrl4": "Videoeinbettungs-URL eingeben",
      "addLabelVideo": "Video",
      "addMediaVideoOther": "Andere",
      "addMediaVideoHelp": "URL überprüfen und Standardminiaturansicht aufrufen",
      "addMediaVideoHelpTooltip1": "Überprüfung erfolgreich",
      "addMediaVideoHelpTooltip2": "Überprüfung fehlgeschlagen",
      "addMediaVideoHelpTooltip4": "Option zum Einbetten des Videos und Kopieren der Video-URL im Code suchen",
      "addLabelName": "Name",
      "addLabelDescription": "Beschriftung",
      "addTextPlaceholder": "Geben Sie etwas ein",
      "addLocatePlaceholder": "Suchen Sie eine Adresse oder einen Ort",
      "addPinColor": "Farbe",
      "addLatitude": "Breitengrad",
      "addLongitude": "Längengrad",
      "addLatitudePlaceholder": "z. B. 34.056",
      "addLongitudePlaceholder": "z. B. -117.195",
      "addUploading": "Tour-Punkt wird hochgeladen",
      "addSave": "Tour-Punkt hinzufügen",
      "addMobileUploading": "Bild wird hochgeladen",
      "addMobileName": "Namen eingeben",
      "addMobileNameMandatory": "Fehler, geben Sie einen Namen ein.",
      "addMobileError": "Leider ist hier etwas schiefgegangen",
      "settingsHeader": "Story-Einstellungen",
      "settingsTabLayout": "Layout",
      "settingsTabColor": "Farben",
      "settingsTabLogo": "Kopfzeile",
      "settingsTabFields": "Daten",
      "settingsTabExtent": "Ausdehnung",
      "settingsTabZoom": "Zoomfaktor",
      "settingsLayoutExplain": "Wählen Sie das gewünschte Layout aus.",
      "settingsLayoutProfessional": "Layout mit drei Bereichen",
      "settingsLayoutModern": "Integriertes Layout",
      "settingsLayoutSelected": "Ausgewähltes Layout",
      "settingsLayoutSelect": "Dieses Layout auswählen",
      "settingsLayoutNote": "Beachten Sie, dass für Punkte, die Videos verwenden, das Werbeplakat immer unter dem Video angezeigt wird, selbst wenn die Option deaktiviert ist.",
      "settingsLayoutLocBtn": "\"Suchen\"-Schaltfläche anzeigen",
      "settingsLayoutLocBtnHelp": "Diese Funktion wird von den meisten Browsern für mobile Geräte und Desktops (Internet Explorer 9) unterstützt.",
      "settingsColorExplain": "Ändern Sie das Aussehen durch Auswahl eines vordefinierten Themas, oder erstellen Sie ein eigenes.",
      "settingsLabelColor": "Farben für Kopfzeilen, Inhalt und Fußzeilen",
      "settingsLogoExplain": "Kopfzeilen-Logo anpassen (max. 250 x 50 Pixel).",
      "settingsLogoEsri": "Esri Logo",
      "settingsLogoNone": "Kein Logo",
      "settingsLogoCustom": "Benutzerdefiniertes Logo",
      "settingsLogoCustomPlaceholder": "Bild-URL",
      "settingsLogoCustomTargetPlaceholder": "Ziel-URL",
      "settingsLogoSocialExplain": "Den Link rechts oben für die Kopfzeile anpassen.",
      "settingsLogoSocialText": "Text",
      "settingsLogoSocialLink": "Link",
      "settingsLogoSocialDisabled": "Diese Funktion wurde vom Administrator deaktiviert",
      "settingsDataFieldsExplain": "Namen, die Beschriftung und die Farbfelder für das Foto auswählen.",
      "settingsDataFieldsError": "Die Anwendung kann die entsprechenden Namens-, Beschriftungs- oder Farbdaten nicht ermitteln. Wählen Sie die Felder aus, die hier verwendet werden sollen. Diese Einstellungen können zu einem späteren Zeitpunkt geändert werden.",
      "settingsFieldsLabelName": "Name",
      "settingsFieldsLabelDescription": "Beschriftung",
      "settingsFieldsLabelColor": "Farbe",
      "settingsFieldsReset": "Feldauswahl zurücksetzen",
      "settingsExtentExplain": "Die Anfangsausdehnung von Map Tour über die nachstehende interaktive Karte festlegen.",
      "settingsExtentExplainBottom": "Die definierte Ausdehnung ändert die Anfangsausdehnung Ihrer Webkarte. Beachten Sie, dass diese Ausdehnung nicht verwendet wird, wenn sie nicht den ersten Tour-Punkt umfasst. In diesem Fall wird die Tour mit Zentrierung auf den ersten Punkt geöffnet.",
      "settingsExtentDateLineError": "Die Ausdehnung darf nicht über den Meridian von 180° Längengrad hinausreichen",
      "settingsExtentDateLineError2": "Fehler beim Berechnen der Ausdehnung",
      "settingsExtentDrawBtn": "Eine neue Ausdehnung darstellen",
      "settingsExtentModifyBtn": "Ausdehnung bearbeiten",
      "settingsExtentApplyBtn": "Vorschau auf Map Tour",
      "settingsExtentUseMainMap": "Ausdehnung von Map Tour verwenden",
      "settingsZoomExplain": "Legt den Zoom für Story-Punkte fest, die auf die Einführung folgen (optional).",
      "settingsLabelZoom": "Maßstab/Ebene",
      "settingsZoomFirstValue": "Keine",
      "settingsFieldError": "Wählen Sie in jeder Liste ein Feld aus",
      "dataTitle": "Gehosteten Map Tour-Layer erstellen",
      "dataExplain": "Ein neuer Feature-Layer wird für Ihre Bilder und Tourpunkte erstellt. Der Tour-Layer wird für niemanden freigegeben, es sei denn, Sie geben Ihre Map Tour frei.",
      "dataExplainPortal": "Für dieses Feature ist Portal for ArcGIS 10.4 erforderlich. Falls das Erstellen oder Bearbeiten des Feature-Layers nicht erfolgreich ist, wenden Sie sich an Ihren ArcGIS-Administrator.",
      "dataNameLbl": "Layer-Name",
      "dataFolderListLbl": "Ordner",
      "dataFolderListFetching": "Ordner werden abgerufen ...",
      "dataRootFolder": "Stammverzeichnis",
      "dataNameError": "Geben Sie einen Namen für den Feature-Service ein",
      "dataFolderError": "Wählen Sie einen gültigen Ordner aus",
      "dataSrcContainsInvalidChar": "Der Feature-Service-Name enthält ein oder mehrere ungültige Zeichen (-, <, >, #, %, :, \", ?, &, +, / oder ).",
      "dataSrvAlreadyExistsError": "Ein Service mit diesem Namen ist bereits in der Organisation vorhanden. Wählen Sie einen anderen Namen.",
      "dataBtnSave": "Layer erstellen",
      "dataFooterProgress": "Wird erstellt",
      "dataFooterSucceed": "Erstellung erfolgreich. Wird geladen",
      "dataFooterError": "Erstellung fehlgeschlagen. Versuchen Sie es erneut",
      "tabError": "Überprüfen Sie alle Registerkarten auf Fehler",
      "introRecordBtn": "Intro",
      "introRecordActivate": "Ersten Punkt als Einführung verwenden (wird nicht im Karussell angezeigt)"
    },
    "addPopupJS": {
      "uploadingPicture": "Bild wird hochgeladen",
      "uploadSuccess": "Upload erfolgreich",
      "uploadError": "Fehler beim Hochladen des Bildes",
      "uploadError2": "Fehler beim Hinzufügen des Features (ungültiges HTML-Tag)",
      "notJpg": "Wählen Sie ein JPEG-Foto zum Hochladen",
      "errorNoPhoto": "Wählen Sie ein Bild zum Hochladen",
      "errorNoThumbnail": "Wählen Sie eine Miniaturansicht zum Hochladen",
      "errorInvalidPicUrl": "Geben Sie eine gültige Bild-URL ein (beginnt mit http(s)://, endet mit jpg, png, gif oder bmp). Sie können die URL auf '#isImage' enden lassen, um die Regel zu umgehen.",
      "errorInvalidThumbUrl": "Geben Sie eine gültige Miniaturansicht-URL für diesen Tour-Punkt ein.",
      "errorInvalidVideoUrl": "Geben Sie eine gültige Video-URL ein (beginnt mit http(s)://)",
      "errorNoName": "Geben Sie einen Namen für den Tour-Punkt ein",
      "errorNoDescription": "Geben Sie eine Beschriftung für diesen Tour-Punkt ein",
      "errorNoLocation": "Legen Sie eine Position für diesen Tour-Punkt fest"
    },
    "builderJS": {
      "noPendingChange": "Keine nicht gespeicherten Änderungen",
      "unSavedChangeSingular": "1 nicht gespeicherte Änderung",
      "unSavedChangePlural": "nicht gespeicherte Änderungen",
      "shareStatus1": "Tour wurde nicht gespeichert",
      "shareStatus2": "Tour wurde öffentlich freigegeben",
      "shareStatus3": "Die Tour wurde in der Organisation freigegeben",
      "shareStatus4": "Tour wurde nicht freigegeben",
      "popoverDiscard": "Möchten Sie wirklich alle nicht gespeicherten Änderungen verwerfen?",
      "yes": "Ja",
      "no": "Nein",
      "popoverLoseSave": "Durch Öffnen des Viewers gehen alle nicht gespeicherten Änderungen verloren",
      "ok": "OK",
      "popoverSaveWhenDone": "Vergessen Sie nicht zu speichern, wenn Sie fertig sind",
      "closeWithPendingChange": "Möchten Sie die Aktion wirklich bestätigen? Ihre Änderungen gehen dabei verloren.",
      "gotIt": "OK",
      "savingApplication": "Story wird gespeichert",
      "saveSuccess": "Story wurde gespeichert",
      "saveError": "Speichern fehlgeschlagen, versuchen Sie es erneut",
      "saveError2": "Fehler beim Speichern aufgrund eines ungültigen HTML-Tags in einem Namen oder einer Beschreibung",
      "saveError3": "Der Titel darf nicht leer sein",
      "dragColorPicker": "Verschieben
oder Farbe ändern",
      "dataWarningExtent": "Es befinden sich Daten außerhalb der Webkartenausdehnung. Diese Daten werden nicht als Tour-Punkte verwendet. Ändern Sie die Kartenausdehnung, wenn Sie sie verwenden möchten.",
      "dataWarningVisibi": "Der Map Tour-Layer ist in der aktuellen Webkartenausdehnung nicht sichtbar. Überprüfen Sie, ob der Map Tour-Layer bei einer Kartengröße von %MAPSIZE% sichtbar ist.",
      "dataWarningEdit": "Webkarte bearbeiten",
      "dataWarningClose": "Schließen",
      "signIn": "Melden Sie sich mit einem Konto an,",
      "signInTwo": ", um die Story zu speichern.",
      "switchBM": "Grundkarte ändern"
    },
    "organizePopupJS": {
      "messageStart": "Sie haben ausgewählt, dass",
      "messageSinglePoint": "ein Tour-Punkt",
      "messageMultiPoint": "Tour-Punkte gelöscht werden soll(en)",
      "messagePermantRemove": "Dabei wird/werden der/die",
      "messageRecord": "Datensatz",
      "messageRecordPlural": "Datensätze",
      "messageConfirm": "dauerhaft aus der Datenbank gelöscht. Möchten Sie fortfahren?",
      "labelButtonShow": "Anzeigen",
      "labelButtonHide": "Ausblenden"
    },
    "picturePanelJS": {
      "popoverDeleteWarningPicAndThumb": "Dabei werden das Bild und die Miniaturansicht dauerhaft gelöscht",
      "popoverDeleteWarningThumb": "Dabei wird die Miniaturansicht dauerhaft gelöscht",
      "popoverUploadingPhoto": "Bild und Miniaturansicht werden hochgeladen",
      "popoverUploadingThumbnail": "Miniaturansicht wird hochgeladen",
      "popoverUploadSuccessful": "Upload erfolgreich",
      "popoverUploadError": "Upload fehlgeschlagen, versuchen Sie es erneut",
      "changePicAndThumb": "Bild ändern",
      "changeThumb": "Miniaturansicht ändern",
      "selectPic": "Medien ändern",
      "selectThumb": "Miniaturansicht ändern",
      "uploadPicAndThumb": "Übernehmen"
    },
    "headerJS": {
      "editMe": "Bearbeiten!",
      "templateTitle": "Vorlagentitel festlegen",
      "templateSubtitle": "Untertitel der Vorlage festlegen"
    },
    "crossFaderJS": {
      "setPicture": "Bildtitel festlegen",
      "setCaption": "Bildbeschreibung festlegen"
    },
    "importPopup": {
      "title": "Importieren",
      "prevBtn": "Zurück",
      "nextBtn": "Weiter"
    },
    "importPopupHome": {
      "header": "Wo werden Ihre Bilder gespeichert?"
    },
    "onlinePhotoSharingCommon": {
      "pictures": "Bilder",
      "videos": "Videos",
      "disabled": "Diese Funktion wurde vom Administrator deaktiviert",
      "disabledPortal": "Für dieses Feature muss im Portal ein ArcGIS Data Store als verwaltete Datenbank konfiguriert sein. Wenden Sie sich an den Portal for ArcGIS-Administrator.",
      "header1": "Ihre Bilder müssen öffentlich freigegeben werden.",
      "header2": "Der Import wird auf die ersten %NB1% %MEDIA% begrenzt.",
      "emptyDataset": "Fehler, keine Bilder gefunden",
      "footerImport": "Importieren",
      "selectAlbum": "Öffentliches Album auswählen",
      "selectAlbum2": "Album auswählen",
      "pleaseChoose": "Treffen Sie eine Auswahl",
      "userLookup": "Suchen",
      "userLookingup": "Wird gesucht",
      "csv": "In CSV referenziert",
      "advanced": "Erweiterte Optionen",
      "advancedScratchLbl": "Neue Tour starten",
      "advancedScratchTip": "Erstellen Sie eine leere Tour, die Sie manuell mit einem Assistenten ausfüllen können.",
      "advancedCSVLbl": "Tour-Daten aus einer CSV-Datei importieren",
      "advancedCSVTip": "Importieren Sie den Tour-Inhalt aus einer CSV-Datei.",
      "advancedCommonTip": "Ihre Bilder und Videos müssen bereits online sein.",
      "select": "Auswahl treffen",
      "locUse": "Geolocation von Bildern verwenden",
      "locExplain": "Es empfiehlt sich nicht, die Positionen der Bilder zu verwenden, da sie vom Album übernommen werden könnten, sodass sich alle Fotos an derselben Position befinden.",
      "locExplain2": "Es empfiehlt sich nicht, die Positionen der Videos zu verwenden, da sie von den Benutzereinstellungen vererbt werden können, was dazu führen kann, dass sich alle Videos an der gleichen Position befinden."
    },
    "viewFlickr": {
      "title": "Import über Flickr",
      "header": "Geben Sie Ihren Flickr-Benutzernamen ein, und wählen Sie einen Fotosatz oder ein Tag für den Import aus.",
      "userInputLbl": "Benutzername eingeben",
      "signInMsg2": "Benutzer nicht gefunden",
      "selectSet": "Fotosatz auswählen",
      "selectTag": "oder Tag auswählen",
      "footerImportTag": "Ausgewählten Tag importieren",
      "footerImportSet": "Ausgewählten Satz importieren"
    },
    "viewFacebook": {
      "title": "Import über Facebook",
      "header": "Authentifizieren Sie sich mit Ihrem Facebook-Benutzerkonto, oder verwenden Sie eine öffentliche Seite. Private Alben können zur Erstellung einer öffentlichen Map Tour verwendet werden, für die keine Facebook-Benutzerauthentifizierung erforderlich ist. Auf diese Weise bleiben Kommentare und \"Gefällt mir\"-Wertungen privat.",
      "leftHeader": "Facebook-Benutzer",
      "rightHeader": "Facebook-Seite",
      "pageExplain": "Eine Facebook-Seite entspricht einer öffentlichen Marke/einem Produkt oder einer prominenten Person wie esrigis. Den Seitennamen können sie dem Text nach dem ersten Schrägstrich ('/') in der Seiten-URL entnehmen.",
      "pageInputLbl": "Seitenname eingeben",
      "lookupMsgError": "Seite nicht gefunden"
    },
    "viewPicasa": {
      "title": "Picasa-Import",
      "header": "Geben Sie Ihre E-Mail-Adresse oder Picasa-ID ein.",
      "userInputLbl": "E-Mail oder Picasa-ID",
      "signInMsg2": "Konto nicht gefunden",
      "signInMsg3": "Kein öffentliches Album",
      "howToFind": "Eine Picasa-ID suchen",
      "howToFind2": "Ziffern zwischen dem ersten und zweiten '/' einer beliebigen Picasa-Seite kopieren"
    },
    "viewCSV": {
      "title": "CSV-Import",
      "uploadBtn": "CSV-Datei auswählen oder ablegen",
      "resultHeaderEmpty": "Die CSV ist leer",
      "resultHeaderSuccess": "Geladene %NB_POINTS%-Punkte",
      "resultHasBeenLimited": "Es wurden nur die ersten %VAL1% Punkte von %VAL2% importiert, um den Höchstwert von %VAL3% Punkten pro Tour nicht zu überschreiten",
      "browserSupport": "Ihr Browser wird nicht unterstützt. Um eine CSV zu verwenden, müssen Sie ein Browser-Upgrade durchführen oder den Webkarten-Viewer von ArcGIS.com verwenden (siehe Hilfe).",
      "errorLatLng": "Die Längen- und Breitengradfelder wurden nicht gefunden. Mögliche Werte sind %LAT% für den Breitengrad und %LONG% für den Längengrad.",
      "errorFieldsExplain": "Der Ladevorgang ist fehlgeschlagen, da die folgenden erforderlichen Felder nicht gefunden wurden",
      "errorFieldsName": "Mögliche Werte für Name sind: %VAL%",
      "errorFieldsDesc": "Mögliche Werte für Beschreibung sind: %VAL%",
      "errorFieldsUrl": "Mögliche Werte für Bild-URL sind: %VAL%",
      "errorFieldsThumb": "Mögliche Werte für Miniaturansicht-URL sind: %VAL%",
      "errorFields2Explain": "Der Ladevorgang ist fehlgeschlagen, da die CSV nicht dieselben Attribute verwendet wie der Layer für die folgenden Attribute",
      "errorFields2Name": "Name: Verwenden Sie %VAL1% anstelle von %VAL2%",
      "errorFields2Desc": "Beschreibung: Verwenden Sie %VAL1% anstelle von %VAL2%",
      "errorFields2Url": "Bild-URL: Verwenden Sie %VAL1% anstelle von %VAL2%",
      "errorFields2Thumb": "Miniaturansicht-URL: Verwenden Sie %VAL1% anstelle von %VAL2%",
      "resultFieldsAll": "Alle Attribute wurden importiert",
      "resultFieldsNotAll": "Die folgenden Attribute wurden nicht importiert, da sie nicht im Karten-Layer vorhanden sind",
      "resultFieldsNotAll2": "Die folgenden Attribute wurden importiert",
      "footerNextBtnResult": "In Webkarte importieren",
      "footerProgress": "Import wird ausgeführt",
      "footerSucceed": "Import erfolgreich. Wird geladen"
    },
    "viewYoutube": {
      "title": "Import über YouTube",
      "header": "Geben Sie einen YouTube-Benutzernamen ein, um nach öffentlich freigegebenen Videos zu suchen.",
      "pageInputLbl": "YouTube-Benutzername eingeben",
      "lookupMsgError": "Benutzer nicht gefunden",
      "howToFind": "So finden Sie einen YouTube-Benutzernamen",
      "howToFind2": "Benutzername wird unter Videos angezeigt",
      "found": "Gefunden",
      "noData": "Keine öffentlichen Videos gefunden"
    },
    "viewGeoTag": {
      "title": "Bilder/Videos auswählen und suchen",
      "header": "Klicken oder tippen Sie auf die Bilder, die importiert werden sollen, um sie zu verorten.",
      "headerMore": "Warum werden meine Bilder nicht verortet?",
      "headerExplain": "Wenn die Bilder über eine gültige Position verfügen, werden sie automatisch auf der Karte verortet und auf der zweiten Registerkarte aufgeführt.

Bei Picasa und Flickr werden die EXIF-Positionsmetadaten nicht standardmäßig verwendet. Überprüfen Sie die Flickr-/Picasa-Einstellungen auf der Registerkarte \"Datenschutz\", um die Verwendung der Bildposition zu aktivieren. Möglicherweise müssen Sie die Bilder vollständig neu in Flickr/Picasa importieren.

Bei Facebook müssen Sie einzeln auf jedes Bild gehen, auf \"Bearbeiten\" klicken und die Position aus den vorgeschlagenen Optionen, die auf den EXIF-Bildmetadaten beruhen, auswählen.",
      "leftPanelTab1": "Zur Verortung",
      "leftPanelTab2": "Verortet",
      "clickOrTap": "Klicken oder tippen Sie zur Verortung auf die Karte",
      "clearLoc": "Positionen löschen",
      "clickDrop": "Nicht importieren",
      "footerImport": "Importieren",
      "footerProgress": "Import wird ausgeführt",
      "footerSucceed": "Import erfolgreich. Wird geladen...",
      "loading": "Wird geladen",
      "error": "Der Import von Geolocations der Bilder ist fehlgeschlagen; Geolocations wurden ignoriert."
    },
    "initPopup": {
      "title": "Willkommen beim Map Tour-Builder",
      "prevBtn": "Zurück",
      "nextBtn": "Weiter"
    },
    "initPopupHome": {
      "header1": "Wo befinden sich Ihre Bilder und Videos?",
      "header2": "Dieser Assistent unterstützt Sie dabei, eine Map Tour aus bereits online gespeicherten Bildern zu erstellen oder die Bilder in Ihr ArcGIS Online for Organizations-Konto zu importieren.",
      "title1": "Sie sind bereits online",
      "title2": "Ich muss meine Bilder hochladen",
      "hostedFSTooltip": "Laden Sie Ihre Bilder hoch, und speichern Sie sie mit dem Map Tour-Layer (Video wird nicht unterstützt).",
      "hostedFsNA": "Sie müssen Publisher sein oder eine andere Rolle mit der Berechtigung zum Veröffentlichen von gehosteten Feature-Layern haben. Wenden Sie sich an Ihren ArcGIS-Administrator.",
      "hostedFsNA2": "Nur im Rahmen einer ArcGIS Online-Subskription verfügbar. Für eine kostenlose Testversion registrieren",
      "footer1": "Vergessen Sie nach der Fertigstellung nicht, Ihre Map Tour über die Elementseite der Anwendung für Ihre Zielgruppe freizugeben.",
      "footer3": "CSV-Vorlage herunterladen",
      "footer4": "\"Speichern unter\", falls kein Download möglich",
      "footer4bis": "Klicken Sie mit der rechten Maustaste, und klicken Sie auf \"Speichern unter\", wenn der Download-Vorgang nicht gestartet wird",
      "footer5": "Weitere Informationen",
      "footerProgress": "Wird erstellt",
      "footerSucceed": "Erstellung erfolgreich. Wird geladen..."
    },
    "helpPopup": {
      "title": "Hilfe",
      "close": "Schließen",
      "tab1": {
        "title": "Einführung",
        "div1": "Die Map Tour-Vorlage ist für die Darstellung geographischer Informationen konzipiert, die durch fotografische oder Medienelemente enorm an Aussagekraft gewinnen können.",
        "div2": "Die Vorlage erstellt eine attraktive und benutzerfreundliche Webanwendung, mit der Sie eine begrenzte Zahl von Orten auf einer Karte in nummerierter Folge darstellen können, durch die Benutzer dann navigieren können. Die Vorlage ist für die Verwendung in einem beliebigen Webbrowser auf jedem beliebigen Gerät konzipiert, z. B. Smartphones und Tablets.

",
        "div42": "Um Beispiele für Map Tours anzuzeigen, die von anderen Benutzern erstellt wurden, besuchen Sie die Galerie auf der Story Maps-Website. Sie können uns unter @EsriStoryMaps auch auf Twitter folgen.",
        "div5": "Wir freuen uns darauf, von Ihnen zu hören! Ob Sie eine Frage haben, ein neues Feature anfordern möchten oder einen Fehler gefunden haben, besuchen Sie das Story Maps-Benutzerforum."
      },
      "tab2": {
        "title": "Daten",
        "div1": "Die wichtigste Entscheidung bei der Erstellung einer Map Tour betrifft die Frage, wo die Bilder gespeichert werden. Eine Map Tour kann in den großen Fotofreigabe-Services, auf einem Webserver oder als Anlage eines Feature-Service gespeicherte Bilder verwenden.",
        "div1a": "Dem letzten Abschnitt dieses Registers können Sie Näheres zu unterstützten Bildformaten und Videos entnehmen.",
        "div2": "Mit dem interaktiven Builder stehen Ihnen zwei Optionen für die Verwendung der Bilder in der Map Tour zur Verfügung:",
        "div3": "

Sie können Fotos verwenden, die bereits online sind, etwa auf einer Fotofreigabe-Website wie Flickr oder auf Ihrer eigenen Website gespeicherte Fotos. Diese Bilder werden in der Map Tour über die URLs referenziert.

Sie können auch Fotos von Ihrem Computer direkt in die Map Tour hochladen. Diese Upload-Funktion setzt voraus, dass Sie ein ArcGIS for Organizations-Konto haben sowie über Publisher- oder Administratorberechtigungen verfügen, da bei dieser Option automatisch ein gehosteter Feature-Service für Sie erstellt wird, in dem die Fotos als Anlagen gespeichert werden.

",
        "div4": "Es gibt hauptsächlich folgende Anwendungsfälle:",
        "div4b": "Ihre Fotos werden noch nicht gehostet und Sie verfügen über ein ArcGIS for Organizations-Konto: Die beste Option in diesem Fall ist die Verwendung eines gehosteten Feature-Service. Wie bei öffentlichen Fotofreigabe-Services werden Ihre Bilder optimiert, damit sie schnell geladen werden können, und Sie haben Zugriff auf alle Administrations- und Datenmanagementfunktionen der ArcGIS Plattform.",
        "div5": "Sie sind kein Mitglied einer Organisation: Sie müssen Ihre Bilder zuerst auf eine Fotofreigabe-Website oder einen eigenen Webserver hochladen. Danach unterstützt Sie der Builder bei der Verwendung der Bilder, die weiter am ursprünglichen Speicherort gehostet werden.",
        "div6": "Sie möchten einen vorhandenen Feature-Service verwenden, in dem Ihre Bilder als Anlagen gespeichert werden oder auf externe Bilder verwiesen wird: Lesen Sie die ausführlichen Informationen im Abschnitt unten.",
        "div7": "Sie verwenden eine frühere Version der Map Tour-Vorlage und verfügen bereits über eine CSV-Datei mit Verweis auf Ihre Bilder und Miniaturansichten: Sie können diese Vorlage importieren und die Daten optimieren. Der Builder unterstützt nur CSV-Dateien mit Verwendung von Längen-/Breitengradfeldern; eine adressbasierte CSV-Datei kann weiter durch Ihre Webkarte verwendet werden (siehe Abschnitt unten).",
        "div8": "Importieren aus Online-Fotofreigabe-Services",
        "div9a": "Facebook wird nicht mehr unterstützt, ${learn}.",
        "learn": "Weitere Informationen",
        "div9": "Beim Importvorgang wird auf bereits gehostete Bilder verwiesen, indem die URLs in einer Webkarten-Feature-Sammlung gespeichert werden. Die Bilder werden nicht in ArcGIS Online gespeichert. Wenn auf die gehosteten Bilder nicht zugegriffen werden kann, sind sie nicht in der Map Tour verfügbar, stattdessen wird \"Bild nicht verfügbar\" angezeigt. Abhängig vom Service-Provider werden Name, Beschreibung und Position der Bilder nicht in die Map Tour importiert. Diese Attribute werden in der Webkarte gespeichert, Änderungen in den Online-Services werden nicht in die Map Tour übernommen.",
        "div10": "Speichern der Bilder auf einem Webserver",
        "div11": "Wenn Sie die Bilder selbst hosten, müssen Sie manuell Miniaturansichten der Bilder erstellen. Wenn für die Miniaturansichten die Bilder in voller Auflösung verwendet werden, wirkt sich dies negativ auf die Performance aus. Aus diesem Grund empfiehlt es sich, einen Online-Fotofreigabe-Service oder einen Feature-Service zu verwenden, der dies für Sie übernimmt.",
        "div12": "Verwenden eines vorhandenen Feature-Service oder Shapefile",
        "div13": "Als Map Tour-Datenquelle kann jeder Punkt-Feature-Service oder jedes Shapefile verwendet werden. Sie müssen den Feature-Service oder das Shapefile nur durch den arcGIS.com Map Viewer als Layer zu Ihrer Webkarte hinzufügen. Wenn die erwarteten Attribute von der Anwendung im Layer gefunden werden, sind alle Builder-Funktionalitäten verfügbar.",
        "div14": "Die möglichen Werte für Feldnamen lauten wie folgt (keine Beachtung der Groß-/Kleinschreibung):",
        "div151": "Name",
        "div152": "Beschreibung",
        "div153": "Bild",
        "div154": "Miniaturansicht",
        "div155": "Farbe ",
        "div16": "Wenn bei der Verwendung eines Feature-Service keine passenden Felder von der Anwendung gefunden werden, funktioniert der Viewer erst, wenn Sie die zu verwendenden Felder durch den Builder konfigurieren. Der zur Webkarte hinzugefügte CSV- und Shapefile-Layer muss alle Pflichtfelder enthalten, damit der Builder funktioniert.",
        "div162": "Bei Nutzung eines Feature-Service, der die Bilder in Form von Anlagen speichert,werden lediglich die Features mit zwei Anlagen verwendet. Die erste Anlage definiert das Hauptbild, der zweite die Miniaturansicht.",
        "div17": "Die Bild- und Miniaturansichtsfelder sind für Feature-Services ohne Anlagen Pflichtfelder und für Feature-Services mit Anlagen optional (jedoch sehr empfehlenswert). Wenn Anlagen für den Service aktiviert sind, können Sie Bilder mit dem Map Tour Builder als Anlagen hochladen. Andernfalls können Sie nur die Bild- und Miniaturansicht-URL bearbeiten.",
        "div172": "Sofern vorhanden, werden die Felder Bild und Miniaturansicht stets verwendet, und die Anlagen des Feature-Service werden nicht abgefragt.",
        "div173": "Beispiele für CSV-Dateien und Shapefiles können heruntergeladen werden unter",
        "div18": "Erstellen eines gehosteten Feature-Service aus einer CSV-Datei oder einem Shapefile",
        "div19": "Bei der Erstellung eines gehosteten Feature-Service aus einer CSV-Datei oder einem Shapefile sind Anlagen nicht standardmäßig aktiviert. Um sie zu aktivieren, öffnen Sie die Feature-Service-Seite und klicken Sie auf den kleinen Pfeil im Layer-Abschnitt, damit die Option angezeigt wird. Die Bilder und Miniaturansichten, auf die Sie durch Attribute verwiesen haben, werden in Map Tour weiter verwendet. Wenn Sie Ihre Bilder optional als Feature-Service-Anlagen hochladen möchten, ist dies über zwei Schaltflächen im Bildbereich möglich (\"Bild ändern\" und \"Miniaturansicht ändern\").",
        "div20": "Unterstützte Bildformate und Videos",
        "div21": "Folgende Bildformate werden unterstützt: .jpg, .jpeg, .png, .gif und .bmp. Sollten Ihre Medien keine dieser Dateierweiterungen aufweisen, werden sie von Map Tour als Video behandelt, es sei denn, Sie verwenden einen Feature-Service (siehe unten).",
        "div22": "Da die Map Tour-Vorlage über keine Videoabspielfunktion verfügt, müssen Sie auf den externen Videoplayer Ihres bevorzugten Video-Hosting-Service zurückgreifen (betten Sie das Video mit der entsprechenden Option ein und kopieren Sie die vorhandene URL in den angegebenen Code). Wenn Sie das Video selbst hosten möchten, können Sie eine HTML-Seite erstellen, die einen Videoplayer wie Video.js enthält.",
        "div23": "Der interaktive Builder bietet keine Dialogfunktion zum Einbetten eines Videos bei Verwendung von Feature-Services mit Anlagen an, aber Sie können die Daten einfach außerhalb des interaktiven Builders bearbeiten. Bearbeiten Sie im arcgis.com Map Viewer die Bildfelder so, dass diese auf ein externes Video verweisen, fügen Sie einen speziellen Parameter (#isVideo) an das Ende Ihrer URL an und schon werden Ihre Medien als Video behandelt.",
        "div24": "Beachten Sie, dass Sie weiterhin zwei gültige Anlagen mit Bildern benötigen; andernfalls wird der Punkt nicht verwendet. Wenn Anlagen von Feature-Services ohne die Felder für Bild und Miniaturansicht verwendet werden, können keine Videos integriert werden."
      },
      "tab3": {
        "title": "Anpassung",
        "div1": "Der Builder enthält mehrere Anpassungsoptionen, auf die durch die Schaltfläche EINSTELLUNGEN im oberen Bereich zugegriffen werden kann. Wenn Sie nicht die erwartete Option finden, steht auch eine herunterladbare Version zur Verfügung, die Sie auf Ihrem Webserver bereitstellen und an Ihre Anforderungen anpassen können.",
        "div2": "Wir empfehlen, mit Ausnahme der im Folgenden genannten Situationen die gehostete Version zu verwenden:",
        "div3": "
Eine gewünschte Anpassung für die Benutzeroberfläche ist nicht verfügbar, etwa die Verwendung eines Kopfzeilen-Hintergrundbildes.

Sie sind Entwickler und möchten die Anwendung erweitern.
",
        "div4": "Die herunterladbare Version kann durch eine Webkartenkennung oder eine Web Mapping-Anwendungskennung konfiguriert werden. Es gibt hauptsächlich folgende Anwendungsfälle:",
        "div41": "Sie erstellen unter Verwendung des interaktiven Builders Ihre Map Tour in der gehosteten Umgebung und konfigurieren die Vorlage mit der Kennung der Webkartenanwendung. Ihre mit dem interaktiven Builder definierten Einstellungen werden angewendet.",
        "div42": "Sie erstellen Ihre Webkarte außerhalb des interaktiven Builders und konfigurieren die Vorlage mit der Webkartenkennung. Eine Anleitung zur Konfiguration der Vorlage können Sie der Dokumentation entnehmen.",
        "div43": "Beachten Sie, dass der interaktive Builder in der herunterladbaren Version verfügbar ist, allerdings ist in manchen Browsern wie dem Internet Explorer vor Version 10 mit technischen Einschränkungen zu rechnen.",
        "div5": "Um die aktuelle Version der Vorlage herunterzuladen und weitere Informationen zu deren Verwendung zu erhalten, besuchen Sie dieGitHub-Projektseite."
      },
      "tab4": {
        "title": "Tipps",
        "div0": "Unterstützte Browser",
        "div0a": "Der Map Tour Viewer wird ab IE8+ unterstützt. Der interaktive Builder wird ab IE9+ unterstützt. Wir testen ihn in den wichtigsten Browsern, aber sollten Sie auf Schwierigkeiten stoßen, empfehlen wir Ihnen die Verwendung von Chrome.",
        "div0b": "Bitte informieren Sie uns, wenn Probleme auftauchen sollten. Zwischenzeitlich können Sie die Interaktionen mit der Builder-Oberfläche reduzieren, indem Sie Ihre Map Tour mithilfe der CSV-Vorlage erstellen.",
        "div1": "Bilder",
        "div2": "Es wird empfohlen, Fotos im Querformat und nicht im Hochformat zu verwenden. Fotos mit einem Seitenverhältnis von 4:3 sind am besten geeignet. Bilder im Hochformat können verwendet werden, allerdings kann auf kleineren Bildschirmen wie beim iPad ein Großteil des Fotos durch die Beschriftung verdeckt sein (Text im Hochformat benötigt mehr Platz als im Querformat). In einer Map Tour können Bilder unterschiedlicher Größe, Form und Ausrichtung verwendet werden, es empfiehlt sich jedoch, für alle Bilder genau dieselbe Größe und Form zu verwenden. Auf diese Weise werden Benutzer nicht durch Bilder unterschiedlicher Größe abgelenkt, während sie die Tour verfolgen.",
        "div2a": "Wir empfehlen eine maximale Bildgröße von 1000 Pixel x 750 Pixel (Breite x Höhe) für Hauptbilder und 140 Pixel x 93 Pixel (Breite x Höhe) für Miniaturansichten.",
        "div3": "Formatieren des Beschriftungstexts mit HTML-Tags",
        "div4": "Der Beschriftungstext kann HTML-Tags zur Definition von Formatierung und Links enthalten. Mit dem folgenden Code wird z.B. ein gelber Link hinzugefügt:",
        "div4a": "Verfassen Sie einen guten Untertitel für Ihre Tour",
        "div4b": "Nehmen Sie sich die Zeit, einen aussagekräftigen Untertitel für Ihre Tour zu verfassen. Der Untertitel ist eine gute Möglichkeit, die Aufmerksamkeit auf Ihre Tour zu lenken und die Erwartungen auf deren Inhalt zu wecken. Er eignet sich hervorragend, um Ihrer Zielgruppe mitzuteilen, in welchem Bundesstaat oder Land sich die Tour befindet. Sie können beispielsweise nicht davon ausgehen, dass andere Benutzer wissen, wo sich die Stadt Ihrer Tour befindet. Die Beschriftung kann außerdem mit HTML-Tags, wie Links, formatiert werden. Wählen Sie dennoch keine zu lange Beschriftung. Sie wird in kleineren Browser-Fenstern oder auf dem iPad möglicherweise nicht vollständig dargestellt und abgeschnitten. Wenn Ihnen kein guter Untertitel einfällt, lassen Sie ihn leer.",
        "div5": "Unterstützende Layer",
        "div6": "Sie können der Map Tour zusätzliche unterstützende Layer hinzufügen. Diese Layer können andere geographische Features enthalten, die Sie neben den Punkten der Map Tour auf der Karte anzeigen möchten, z. B. ein Untersuchungsgebiet, eine Fußgänger- oder Fahrroute zwischen den Tourpunkten usw. Die Map Tour-Vorlage zeigt diese zusätzlichen unterstützenden Layer mit der in der Webkarte angegebenen Symbolisierung an, allerdings ohne Pop-ups.",
        "div7": "Halten Sie die Tour kurz und interessant",
        "div8": "Eine Tour kann höchstens 99 Punkte enthalten. Die meisten Map Tours sind natürlich weit kürzer. Erwarten Sie nicht, dass Ihre Zielgruppe sich für zu viele Tourpunkte interessiert. Dass Sie selbst Ihr Thema faszinierend finden, bedeutet nicht, dass andere dies ähnlich empfinden müssen!",
        "div10": "Einbettungsmodus",
        "div11": "Wenn Sie die Vorlage auf einer anderen Website über ein iframe einbetten wollen, dann können Sie die Kopfzeile entfernen, indem Sie der URL am Ende \"&embed\" anfügen. Dieser Modus lässt sich auch in der herunterladbaren Version über die Konfigurationsdatei einstellen.",
        "div12": "Verwenden Sie keinen schmalen iFrame, der dazu führen, dass die Map Tour zu ihrem kleinformatigen reaktionsschnellen Touchscreen-Layout wechselt, um die Benutzerfreundlichkeit zu maximieren. Wenn Sie eine Map Tour einbetten, empfiehlt es sich, stets einen Link neben der eingebetteten Tour bereitzustellen, damit die Benutzer den Vollbildschirm der Tour starten können."
      },
      "tab5": {
        "title": "Veröffentlichung",
        "div1": "Vergessen Sie nach der Fertigstellung nicht, Ihre Map Tour über die Schaltfläche FREIGEBEN oder die Elementseite der Anwendung in ArcGIS Online für Ihre Zielgruppe freizugeben.",
        "div2a": "Freigeben der Tour mit dem Builder",
        "div2b": "Mit der Schaltfläche FREIGEBEN werden die Anwendungs- und Webkartenelemente freigegeben. Wenn Ihre Tour-Daten in einem Feature-Service-Element gespeichert sind, werden diese ebenfalls aktualisiert. Wenn Sie andere Layer über ArcGIS.com Map Viewer hinzugefügt haben, werden sie nicht aktualisiert. Dies kann dazu führen, dass die Tour nicht wie erwartet freigegeben wird. Elemente, die bereits über die erforderlichen (oder mehr) Berechtigungen verfügen, werden nicht aktualisiert.",
        "div2c": "Freigeben der Tour über ArcGIS Online",
        "div2d": "Wenn Sie die Anwendung über ArcGIS Online freigeben, werden Sie ggf. aufgefordert, alle abhängigen Ressourcen (Webkarte, Feature-Service, Verzierungs-Layer) zu aktualisieren, die nicht auf dieselbe Weise freigegeben werden. Sollte bei veröffentlichter Map Tour eine der Ressourcen nicht für die Zielgruppe freigegeben sein, werden die Benutzer zur ArcGIS Online-Anmeldeseite umgeleitet.",
        "div3t": "Sicherheit für Feature-Services",
        "div3a": "Wenn Sie einen durch den Map Tour-Builder gehosteten Feature-Service verwenden, wird die Service-Sicherheit von der Anwendung für Sie verwaltet, und nur Sie verfügen über Bearbeitungsberechtigungen, selbst wenn der Service öffentlich freigegeben ist.",
        "div3t2": "Bevor Sie die Tour für Ihre Zielgruppe freigeben",
        "div3": "Stellen Sie sicher, dass die Tour auch dann ordnungsgemäß funktioniert, wenn Sie nicht mit Ihrem ArcGIS.com-Konto angemeldet sind. Die URL, die Sie verwenden, sollte keine Umleitung zu einer Anmeldeseite oder zum Builder-Modus ausführen.",
        "div4": "Es empfiehlt sich, die Karte auf einem iPad im Querformat anzuzeigen, um sicherzustellen, das sie auf diesem gängigen Gerät gut aussieht. Dadurch können Sie leichter erkennen, ob Ihre Beschriftungen die Bilder nicht zu sehr überlagern. Sie können außerdem überprüfen, ob Ihr Untertitel die richtige Länge hat und nicht etwa abgeschnitten wird.",
        "div5a": "Empfehlungen für die Suche",
        "div5b": "Damit Ihre Map Tour leichter in ArcGIS Online gefunden werden kann, wird empfohlen, das Tag \"Story Map\" auf der Elementseite der Tour-Anwendung  (nicht auf der Elementseite der Karte) gemeinsam mit Tags, beispielsweise der Name des Bundeslandes oder des Kantons, in dem sich die Tour befindet, der Namen des Landes und thematische Tags wie \"öffentliche Kunst\", \"Reiseführer\" oder \"historische Orte\" hinzuzufügen. Diese Tags erleichtern Esri die Suche nach coolen neuen Touren, um sie in eigenen Galerien darzustellen und in Social Media zu bewerben. Es wird außerdem empfohlen, eine ansprechende Miniaturansicht, wie beispielsweise einen kleinen Screenshot der Tour oder eines der Tour-Bilder, auf die Elementseite der Anwendung hochzuladen. Dieses Bild wird automatisch verwendet, wenn Ihre Map Tour einer ArcGIS Online-Galerie hinzugefügt wird."
      }
    },
    "share": {
      "firstSaveTitle": "Tour gespeichert",
      "manageStory": "Ihre Story verwalten",
      "manageStoryA1": "Tipp: Mithilfe von %LINK1% können Sie Ihre Story auf Fehler überprüfen und die Freigabe der einzelnen Komponenten ändern.\" Eigene Storys\"  hilft Ihnen außerdem dabei, die Darstellung Ihrer Story in sozialen Netzwerken zu optimieren. Informationen zu weiteren nützlichen Features von \" Eigene Storys\"  finden Sie in diesen %LINK2%.",
      "manageStoryA1V1": "Eigene Storys",
      "manageStoryA1V2": "Blog-Postings",
      "shareTitle": "Freigeben Ihrer Tour",
      "sharePrivateHeader": "Ihre Tour ist nicht freigegeben. Möchten Sie sie freigeben?",
      "sharePrivateBtn1": "Öffentlich freigeben",
      "sharePrivateBtn2": "Für meine Organisation freigeben",
      "sharePrivateProgress": "Freigabe wird ausgeführt...",
      "sharePrivateErr": "Fehler bei der Freigabe. Versuchen Sie es erneut, oder",
      "sharePrivateOk": "Freigabe aktualisiert, wird geladen...",
      "sharePreviewAsUser": "Vorschau",
      "shareHeader1": "Ihr Tour ist öffentlich zugänglich.",
      "shareHeader2": "Ihre Tour ist für die Mitglieder Ihrer Organisation zugänglich (Anmeldung ist erforderlich).",
      "shareLinkHeader": "Freigeben Ihrer Tour",
      "shareLinkOpen": "ÖFFNEN",
      "shareA1": "Verwenden Sie %SHAREIMG% auf der Anwendungselementseite. Wenn Sie die Freigabe der Webkarte aufheben möchten, verwenden Sie die Elementseite der Webkarte.",
      "shareWarning": "Die Freigabe von %WITH% wurde deaktiviert, da Sie nicht der Besitzer der Webkarte sind.",
      "shareWarningWith1": "öffentlich",
      "shareWarningWith2": "öffentlich und für die Organisation"
    },
    "locator": {
      "error": "Position ist nicht verfügbar"
    },
    "saveErrorSocial": {
      "title": "Freigabeaktualisierung für Social Media",
      "panel1": "Das Aussehen Ihrer Story in den Social Media wurde verbessert, der Titel Ihres ArcGIS-Webanwendungselements stimmt aber nicht mit dem Titel der Story überein.",
      "panel1tooltip": "Wenn Sie einen Titel, eine Zusammenfassung und eine Miniaturansicht definieren, sieht Ihre Story wie folgt aus:",
      "panel2": "Welchen Titel möchten Sie in den Social Media verwenden?",
      "panel2q1": "Titel der Story (empfohlen)",
      "panel2q1tooltip": "Wenn Sie diese Option wählen, wird der Elementtitel in den Titel Ihrer Story geändert und alle weitere Änderungen im Builder werden synchronisiert.",
      "panel2q2": "Elementtitel",
      "panel3": "Wenn Sie das Aussehen Ihrer Story in den Social Media zusätzlich verbessern möchten, fügen Sie mithilfe von ${MYSTORIES} eine Zusammenfassung und eine Miniaturansicht hinzu.",
      "panel4": "Für diese Story keine Warnmeldung mehr anzeigen",
      "mystories": "Eigene Storys",
      "btnSave": "Speichern"
    }
  }
});


text:
using UnityEditor;
using UnityEngine;

namespace BitStrap.Examples
{
	/// <summary>
	/// Open this window by navigating in Unity Editor to "Window/BitStrap Examples/Extensions/AllEditorStyles".
	/// </summary>
	public class AllEditorStylesExample : EditorWindow
	{
		public bool showStyles;

		[MenuItem( "Window/BitStrap Examples/Helpers/AllEditorStyles" )]
		public static void CreateWindow()
		{
			GetWindow<AllEditorStylesExample>().Show();
		}

		private void OnGUI()
		{
			using( Horizontal.Do( EditorStyles.toolbar ) )
			{
				showStyles = GUILayout.Toggle( showStyles, "Styles", EditorStyles.toolbarButton );
				showStyles = !GUILayout.Toggle( !showStyles, "Icons", EditorStyles.toolbarButton );
			}

			if( showStyles )
				EditorHelper.DrawAllStyles();
			else
				EditorHelper.DrawAllIcons();
		}
	}
}


text:
@class NSString;
@class WKPreferences;
@class WKProcessPool;
@class WKUserContentController;
@class WKWebsiteDataStore;

typedef NS_ENUM(NSInteger, WKSelectionGranularity) { WKSelectionGranularityDynamic, WKSelectionGranularityCharacter };

WEBKIT_EXPORT_CLASS
@interface WKWebViewConfiguration : NSObject <NSCopying>
@property (nonatomic, copy) NSString* applicationNameForUserAgent;
@property (nonatomic, strong) WKPreferences* preferences;
@property (nonatomic, strong) WKProcessPool* processPool;
@property (nonatomic, strong) WKUserContentController* userContentController;
@property (nonatomic, strong) WKWebsiteDataStore* websiteDataStore;
@property (nonatomic) BOOL suppressesIncrementalRendering;
@property (nonatomic) BOOL allowsInlineMediaPlayback;
@property (nonatomic) BOOL allowsAirPlayForMediaPlayback;
@property (nonatomic) BOOL mediaPlaybackAllowsAirPlay;
@property (nonatomic) BOOL requiresUserActionForMediaPlayback;
@property (nonatomic) BOOL mediaPlaybackRequiresUserAction;
@property (nonatomic) BOOL allowsPictureInPictureMediaPlayback;
@property (nonatomic) WKSelectionGranularity selectionGranularity;
@end


text:
time /usr/local/hadoop/bin/hadoop jar ../build/lolmathces.jar \
com.mongodb.hadoop.examples.lolmatches.LOLMatchesXMLConfig \
-Dmongo.input.split_size=20 \
-Dmongo.job.verbose=true \
-Dmongo.input.uri=mongodb://localhost:27017/lol.matches \
-Dmongo.output.uri=mongodb://localhost:27017/lol.output


text:
title: Change Text Inside an Element Using jQuery
localeTitle: Alterar texto dentro de um elemento usando jQuery
---
## Alterar texto dentro de um elemento usando jQuery

Este é um esboço. [Ajude nossa comunidade a expandi-lo](https://github.com/freecodecamp/guides/tree/master/src/pages/certifications/front-end-libraries/jquery/change-text-inside-an-element-using-jquery/index.md) .

[Este guia de estilo rápido ajudará a garantir que sua solicitação de recebimento seja aceita](https://github.com/freecodecamp/guides/blob/master/README.md) .


text:
/**
 * Data structure encapsulating tic-tac-toe square state
 *
 * Ian Nelson
 * CMIS315
 * Homework 4
 * Jeff H. Stanford
 */

// Class/Library includes.
#include "Square.h"

/**
 * Default constructor, sets neutral state
 */
Square::Square () {
    state = '-';
};

/**
 * Default destructor
 */
Square::~Square () {
    // Nothing to destruct.
};

/**
 * Sets the square's state to 'X'
 *
 * @return State indicating if state was set
 */
bool Square::setX () {
    // State set by default.
    bool set = true;

    // Neutral state?
    if (state == '-') {
        // Set it to 'X'.
        state = 'X';
        set = true;
    }
    // Nope.
    else {
        set = false;
    }

    return set;
};

/**
 * Sets the square's state to 'O'
 *
 * @return State indicating if state was set
 */
bool Square::setO () {
    // State set by default.
    bool set = true;

    // Neutral state?
    if (state == '-') {
        state = 'O';
        set = true;
    }
    // Nope.
    else {
        set = false;
    }

    return set;
};

/**
 * Retrieves the square's state
 *
 * @return State of the square
 */
char Square::get () {
    return state;
};


text:
@interface MKLoadingIndicator : NSObject

- (instancetype)init;
- (instancetype)initWithTimeout:(NSTimeInterval)timeout;

- (void)loadingDidFinish;

@end


text:
class ActorAPI;

enum SpringType {
    SPRING_RED = 1,
    SPRING_GREEN = 2,
    SPRING_BLUE = 3
};

class Spring : public CommonActor {
public:
    Spring(const ActorInstantiationDetails& initData, SpringType type, unsigned char orient);
    ~Spring();
    void updateHitbox() override;
    sf::Vector2f activate();

private:
    unsigned char orientation;
    float strength;
};


text:
package org.sakaiproject.coursemanagement.api;

import java.util.Date;
import java.util.Set;

/**
 * An instance of a course.
 *
 * @author Josh Holtzman
 */
public interface CourseOffering {

	/**
	 * Gets the unique enterprise id of this CourseOffering.
	 * @return
	 */
	public String getEid();
	public void setEid(String eid);

	/**
	 * What authority defines this object?
	 * @return
	 */
	public String getAuthority();
	public void setAuthority(String authority);

	/**
	 * Gets the title of this CourseOffering.
	 * @return
	 */
	public String getTitle();
	public void setTitle(String title);

	/**
	 * Gets the description of this CourseOffering.
	 * @return
	 */
	public String getDescription();
	public void setDescription(String description);

	/**
	 * Gets the status of this CourseOffering.  This might be open, closed, planned, or discontinued, for example.
	 * @return
	 */
	public String getStatus();
	public void setStatus(String status);

	/**
	 * The AcademicSession for this course offering
	 * @return
	 */
	public AcademicSession getAcademicSession();
	public void setAcademicSession(AcademicSession academicSession);

	/**
	 * The date this CourseOffering starts (if any).  Typically, a CourseOffering
	 * starts when its AcademicSession starts.  Since this isn't necessarily true
	 * for every CourseOffering, the startDate can be set explicitly here.
	 *
	 * @return
	 */
	public Date getStartDate();
	public void setStartDate(Date startDate);

	/**
	 * The date this CourseOffering ends (if any).  Typically, a CourseOffering
	 * ends when its AcademicSession ends.  Since this isn't necessarily true
	 * for every CourseOffering, the endDate can be set explicitly here.
	 *
	 * @return
	 */
	public Date getEndDate();
	public void setEndDate(Date endDate);

	/**
	 * Gets the enterprise ID of the CourseOffering's CanonicalCourse.
	 * @return
	 */
	public String getCanonicalCourseEid();

	/**
	 * Gets the Set <String> of course set EIDs that contain this canonical course.
	 * @return
	 */
	public Set<String> getCourseSetEids();

}


text:
<!DOCTYPE html>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="keywords" content="">
    <meta name="author" content="">
    <meta charset="utf-8">
    <title>CIDR Map</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
    <link href="../static/css/main.css" rel="stylesheet" type="text/css" />

So, You Want to be A Hax0rz?


text:
import datetime
import StringIO
import sys

from django.conf import settings
from django.core.mail import mail_managers, mail_admins
from django.template.loader import render_to_string
from django.contrib.sites.models import Site

from twill.parse import execute_string
from twill.errors import TwillAssertionError

def _send_error(kong_site, test, content):
    real_site = Site.objects.get_current()
    message = render_to_string('kong/failed_email.txt', {'kong_site': kong_site,
                                                         'test': test,
                                                         'error': content,
                                                         'real_site': real_site})
    if getattr(settings, 'KONG_MAIL_MANAGERS', False):
        mail_managers('Kong Test Failed: %s (%s)' % (test, kong_site), message)
    if getattr(settings, 'KONG_MAIL_ADMINS', False):
        mail_admins('Kong Test Failed: %s (%s)' % (test, kong_site), message)

def _send_recovery(kong_site, test, content):
    real_site = Site.objects.get_current()
    message = render_to_string(
        'kong/recovered_email.txt', {
            'kong_site': kong_site,
            'test': test,
            'content': content,
            'real_site': real_site
        }
    )
    if getattr(settings, 'KONG_MAIL_MANAGERS', False):
        mail_managers('Kong Test Recovered: %s (%s)' % (test, kong_site), message)
    if getattr(settings, 'KONG_MAIL_ADMINS', False):
        mail_admins('Kong Test Recovered: %s (%s)' % (test, kong_site), message)

def execute_test(site, test):
    import twill.commands as commands
    #Avoid circular import
    from kong.models import TestResult
    twill_script = test.render(site)
    content = ''
    old_err = sys.stderr
    new_err = StringIO.StringIO()
    commands.ERR = new_err

    now = datetime.datetime.now()
    try:
        if getattr(settings, 'KONG_RESET_BROWSER', False):
            execute_string(twill_script, no_reset = False)
        else:
            execute_string(twill_script)
        succeeded = True
        content = new_err.getvalue().strip()
    except Exception, e:
        succeeded = False
        content = new_err.getvalue().strip() + "\n\nException:\n\n" + str(e)

    end = datetime.datetime.now()
    duration = end - now
    duration = duration.microseconds
    commands.ERR = old_err
    result = TestResult.objects.create(site=site,
                                       test=test,
                                       succeeded=succeeded,
                                       duration=duration,
                                       content=content)

    if result.notification_needed and result.failed:
        _send_error(site, test, content)
    if result.notification_needed and result.succeeded:
        _send_recovery(site, test, content)

    return succeeded


text:
require 'spec_helper'

feature 'Merge When Build Succeeds', feature: true, js: true do
  let(:user) { create(:user) }
  let(:project) { create(:project, :public) }

  let(:merge_request) do
    create(:merge_request_with_diffs, source_project: project,
                                      author: user,
                                      title: 'Bug NS-04')
  end

  let(:pipeline) do
    create(:ci_pipeline, project: project,
                         sha: merge_request.diff_head_sha,
                         ref: merge_request.source_branch)
  end

  before { project.team << [user, :master] }

  context 'when there is active build for merge request' do
    background do
      create(:ci_build, pipeline: pipeline)
    end

    before do
      login_as user
      visit_merge_request(merge_request)
    end

    it 'displays the Merge When Build Succeeds button' do
      expect(page).to have_button "Merge When Build Succeeds"
    end

    context "Merge When Build succeeds enabled" do
      before do
        click_button "Merge When Build Succeeds"
      end

      it 'activates Merge When Build Succeeds feature' do
        expect(page).to have_link "Cancel Automatic Merge"

        expect(page).to have_content "Set by #{user.name} to be merged automatically when the build succeeds."
        expect(page).to have_content "The source branch will not be removed."

        visit_merge_request(merge_request) # Needed to refresh the page
        expect(page).to have_content /Enabled an automatic merge when the build for [0-9a-f]{8} succeeds/i
      end
    end
  end

  context 'when merge when build succeeds is enabled' do
    let(:merge_request) do
      create(:merge_request_with_diffs, :simple,  source_project: project,
                                                  author: user,
                                                  merge_user: user,
                                                  title: 'MepMep',
                                                  merge_when_build_succeeds: true)
    end

    let!(:build) do
      create(:ci_build, pipeline: pipeline)
    end

    before do
      login_as user
      visit_merge_request(merge_request)
    end

    it 'allows to cancel the automatic merge' do
      click_link "Cancel Automatic Merge"

      expect(page).to have_button "Merge When Build Succeeds"

      visit_merge_request(merge_request) # refresh the page
      expect(page).to have_content "canceled the automatic merge"
    end

    it "allows the user to remove the source branch" do
      expect(page).to have_link "Remove Source Branch When Merged"

      click_link "Remove Source Branch When Merged"
      expect(page).to have_content "The source branch will be removed"
    end

    context 'when build succeeds' do
      background { build.success }

      it 'merges merge request' do
        visit_merge_request(merge_request) # refresh the page

        expect(page).to have_content 'The changes were merged'
        expect(merge_request.reload).to be_merged
      end
    end
  end

  context 'when build is not active' do
    it "does not allow to enable merge when build succeeds" do
      visit_merge_request(merge_request)
      expect(page).not_to have_link "Merge When Build Succeeds"
    end
  end

  def visit_merge_request(merge_request)
    visit namespace_project_merge_request_path(merge_request.project.namespace, merge_request.project, merge_request)
  end
end


text:
<?php
/**
*	Get Property Performance Example.
*
*	@package	Frozensheep\RightmoveADF
*	@author		Jacob Wyke <jacob@frozensheep.com>
*	@license	MIT
*
*/

require_once(__DIR__.'/../vendor/autoload.php');

use Frozensheep\RightmoveADF\RightmoveADF;

//include the config file
require_once('config.php');

//create the RightmoveADF object
$objRightmoveADF = new RightmoveADF(CERT_FILE, CERT_PASS, RightmoveADF::TEST);

//create a request
$objRequest = $objRightmoveADF->createRequest(RightmoveADF::GetPropertyPerformance);

//set the details for the request
$objRequest->network->network_id = NETWORK_ID;
$objRequest->branch->branch_id = BRANCH_ID;
$objRequest->property->agent_ref = PROPERTY_REF;
$objRequest->export_period->start_date = '28 days ago';
$objRequest->export_period->end_date = 'yesterday';

//send the request
$objResponse = $objRightmoveADF->send($objRequest);

print_r($objResponse);


text: from .script import Script


text:
/**
 *
 * @author Edwards
 */
public abstract class AverageVariable implements ILineGraphVariable
{
    public AverageVariable(double min, double max)
    {
        this.maxval = max;
        this.minval = min;
        this.useMin = false;
        this.useMax = false;
    }
    public AverageVariable(boolean useMin, boolean useMax)
    {
        this.useMin = useMin;
        this.useMax = useMax;
        if (useMax)
            maxval = Double.NaN;
        if (useMin)
            minval = Double.NaN;
    }
    public AverageVariable()
    {
        this.useMin = false;
        this.useMax = true;
        maxval = Double.NaN;
        minval = 0;
    }
    boolean useMax;
    boolean useMin;

    double maxval;
    double minval;

    public double getMax() {
        if (!useMax)
            return maxval;

        if (Double.isNaN(maxval))
            maxval = getValue();
        maxval = Math.max(getValue(), maxval);
        return maxval;
    }

    public double getMin()
    {
        if (!useMin)
            return minval;

        if (Double.isNaN(minval))
            minval = getValue();
        minval = Math.min(getValue(), minval);
        return minval;
    }
}


text:
NS_ASSUME_NONNULL_BEGIN

@interface NSManagedObjectContext (MCD)

// returns a main queue context using the default persistent store coordinator.
// exceptions if fails to create the store.
+ (instancetype)mcd_defaultContext;

// Creates a new managed object context associated with a private queue.
// Designed to work on a context that already has an SQLite store added because it creates a new coordinator with the same URL.
- (NSManagedObjectContext *)mcd_newBackgroundContextWithError:(NSError **)error;

// creates a child context with the same concurrency type.
- (NSManagedObjectContext *)mcd_createChildContext;

// exceptions if entity does not exist
//- (NSManagedObject*)mcd_insertNewObjectForEntityName:(NSString *)name;

//- (NSEntityDescription*)mcd_entityDescriptionForName:(NSString *)name;

// check for nil array on error.
- (NSArray *)mcd_fetchObjectsWithEntityName:(NSString *)entityName predicate:(nullable NSPredicate*)predicate error:(NSError **)error;

// dictionary of keys and values that an and predicate will be used. Include NSNull for null values in the query.
- (NSArray *)mcd_fetchObjectsWithEntityName:(NSString *)entityName dictionary:(NSDictionary*)dictionary error:(NSError **)error;

// If there was an error fetching the error is set and nil is returned. If in an insert is required an object will always be returned with no error.
- (NSManagedObject *)mcd_fetchOrInsertObjectWithEntityName:(NSString *)entityName dictionary:(NSDictionary *)dictionary inserted:(BOOL *)inserted error:(NSError **)error;

// errors if not found
- (NSManagedObject *)mcd_existingObjectWithEntityName:(NSString *)entityName dictionary:(NSDictionary *)dictionary error:(NSError **)error;

// errors if not found
- (NSManagedObject *)mcd_existingObjectWithEntityName:(NSString *)entityName predicate:(NSPredicate *)predicate error:(NSError **)error;

- (BOOL)mcd_saveRollbackOnError:(NSError **)error;

// function is one of the predefined NSExpression functions, e.g. max: sum: etc. Returns nil if there is no value.
- (id)mcd_fetchValueForAggregateFunction:(NSString *)function attributeName:(NSString *)attributeName entityName:(NSString *)entityName predicate:(nullable NSPredicate *)predicate error:(NSError **)error;

@property (nonatomic, setter=mcd_setAutomaticallyMergesChangesFromParent:) BOOL mcd_automaticallyMergesChangesFromParent;

// This wait so that the next operation in the queue doesn't start too soon.
- (NSOperation *)mcd_operationPerformingBlockAndWait:(void (^)(void))block;

// when saving a context into its parent, if it errors this method allows you to automatically undo the changes.
//- (BOOL)mcd_saveUndoParentOnError:(NSError **)error;

//@property (strong, nonatomic) NSString *debugName;
- (BOOL)mcd_save;
- (BOOL)mcd_saveWithLogDescription:(nullable NSString *)format, ... NS_FORMAT_FUNCTION(1,2);

// assumed to exist
- (__kindof NSManagedObject *)mcd_objectWithURI:(NSURL *)URI;

// returns nil if doesn't exist.
- (nullable __kindof NSManagedObject *)mcd_existingObjectWithURI:(NSURL *)objectURI error:(NSError**)error;

@end

NS_ASSUME_NONNULL_END


text:
struct skull_config_t {
    const char*    config_file_name;
    sk_cfg_node_t* config;
};

skull_config_t* skull_config_create(const char* config_file_name)
{
    if (!config_file_name) {
        sk_print("error: config file name is NULL\n");
        return NULL;
    }

    sk_cfg_node_t* cfg = sk_config_load(config_file_name);
    if (!cfg) {
        sk_print("error: config %s load failed\n", config_file_name);
        return NULL;
    }

    skull_config_t* config = calloc(1, sizeof(*config));
    config->config_file_name = strdup(config_file_name);
    config->config = cfg;
    return config;
}

void skull_config_destroy(const skull_config_t* config)
{
    if (!config) {
        return;
    }

    free((void*)config->config_file_name);
    sk_config_delete(config->config);
    free((void*)config);
}

int    skull_config_getbool    (const skull_config_t* config, const char* key_name,
                               int default_value)
{
    sk_cfg_node_t* root = config->config;
    SK_ASSERT_MSG(root->type == SK_CFG_NODE_MAPPING,
                  "skull config root node type: %d\n", root->type);

    if (!key_name) {
        return 0;
    }

    int value = default_value;
    sk_cfg_node_t* target_node = fhash_str_get(root->data.mapping, key_name);
    if (target_node) {
        value = sk_config_getbool(target_node);
    }

    return value;
}

int    skull_config_getint    (const skull_config_t* config, const char* key_name,
                               int default_value)
{
    sk_cfg_node_t* root = config->config;
    SK_ASSERT_MSG(root->type == SK_CFG_NODE_MAPPING,
                  "skull config root node type: %d\n", root->type);

    if (!key_name) {
        return 0;
    }

    int value = default_value;
    sk_cfg_node_t* target_node = fhash_str_get(root->data.mapping, key_name);
    if (target_node) {
        value = sk_config_getint(target_node);
    }

    return value;
}

double skull_config_getdouble (const skull_config_t* config, const char* key_name,
                               double default_value)
{
    sk_cfg_node_t* root = config->config;
    SK_ASSERT_MSG(root->type == SK_CFG_NODE_MAPPING,
                  "skull config root node type: %d\n", root->type);

    if (!key_name) {
        return 0;
    }

    double value = default_value;
    sk_cfg_node_t* target_node = fhash_str_get(root->data.mapping, key_name);
    if (target_node) {
        value = sk_config_getdouble(target_node);
    }

    return value;
}

const char* skull_config_getstring(const skull_config_t* config,
                                   const char* key_name)
{
    sk_cfg_node_t* root = config->config;
    SK_ASSERT_MSG(root->type == SK_CFG_NODE_MAPPING,
                  "skull config root node type: %d\n", root->type);

    if (!key_name) {
        return 0;
    }

    const char* value = "";
    sk_cfg_node_t* target_node = fhash_str_get(root->data.mapping, key_name);
    if (target_node) {
        value = sk_config_getstring(target_node);
    }

    return value;
}