text:
title: Migrating from InfluxDB OSS to InfluxDB Enterprise clusters
aliases:
    - /enterprise/v1.3/guides/migration/
menu:
  enterprise_influxdb_1_3:
    weight: 10
    parent: Guides
---

The following guide has step-by-step instructions for migrating an InfluxDB OSS
instance into an InfluxDB Enterprise cluster.

{{% warn %}}
The process assumes that you already have a fully configured InfluxDB Enterprise cluster
of three or more meta nodes and zero or more data nodes. If you need instructions for meta node installation:
- [Production Installation of Meta Nodes](/enterprise_influxdb/v1.3/production_installation/meta_node_installation/)
{{% /warn %}}

Please note that this migration process:

* Deletes all data from any data nodes that are already part of the InfluxDB Enterprise cluster
* Will transfer all users from the OSS instance to the InfluxDB Enterprise cluster*
* Requires downtime for writes and reads for the OSS instance

{{% warn %}}
If you're using an InfluxDB Enterprise cluster version prior to 0.7.4, the
following steps will **not** transfer users from the OSS instance to the
InfluxDB Enterprise Cluster.
{{% /warn %}}

In addition, please refrain from creating a Global Admin user in the InfluxDB Enterprise Web Console before implementing these steps. If you've already created a Global Admin user, contact support.

## Modify the /etc/hosts file

Add the IP and hostname of the OSS instance to the
`/etc/hosts` file on all nodes in the InfluxDB Enterprise cluster.
Ensure that all cluster IPs and hostnames are also in the OSS
instance's `/etc/hosts` file.

**Note:** All node hostnames must be completely resolvable by all
other nodes in the cluster. If you have DNS already setup in your
environment, then this step can be skipped.

## For all existing InfluxDB Enterprise data nodes:

### 1. Remove the node from the InfluxDB Enterprise Cluster

From a **meta** node in your InfluxDB Enterprise cluster, enter:
```
influxd-ctl remove-data <data_node_hostname>:8088
```
### 2. Delete any existing data

On each **data** node that you dropped from the cluster, enter:
```
sudo rm -rf /var/lib/influxdb/{meta,data,hh}
```

### 3. Create new directories

On each data node that you dropped from the cluster, enter:
```
sudo mkdir /var/lib/influxdb/{data,hh,meta}
```
To ensure the file permissions are correct please run:
```
sudo chown -R influxdb:influxdb /var/lib/influxdb
```

## For the OSS Instance:

### 1. Stop all writes to the InfluxDB OSS instance

### 2. Stop the influxdb service on the InfluxDB OSS instance

On sysvinit systems, use the `service` command:
```
sudo service influxdb stop
```

On systemd systems, use the `systemctl` command:
```
sudo systemctl stop influxdb
```

Double check that the service is stopped (the following should return nothing):
```
ps ax | grep influxd
```

### 3. Remove the InfluxDB OSS package

On Debian/Ubuntu systems:
```
sudo apt-get remove influxdb
```

On RHEL/CentOS systems:
```
sudo yum remove influxdb
```

### 4. Update the binary

> **Note:** This step will overwrite your current configuration file.
If you have settings that you'd like to keep, please make a copy of your config file before running the following command.

#### Ubuntu & Debian (64-bit)
```
wget https://dl.influxdata.com/enterprise/releases/influxdb-data_1.3.8-c1.3.8_amd64.deb
sudo dpkg -i influxdb-data_1.3.8-c1.3.8_amd64.deb
```

#### RedHat & CentOS (64-bit)
```
wget https://dl.influxdata.com/enterprise/releases/influxdb-data-1.3.8_c1.3.8.x86_64.rpm
sudo yum localinstall influxdb-data-1.3.8_c1.3.8.x86_64.rpm
```

### 5. Update the configuration file

In `/etc/influxdb/influxdb.conf`, set:

* `hostname` to the full hostname of the data node
* `license-key` in the `[enterprise]` section to the license key you received on InfluxPortal **OR** `license-path`
in the `[enterprise]` section to the local path to the JSON license file you received from InfluxData.

{{% warn %}}
The `license-key` and `license-path` settings are mutually exclusive and one must remain set to the empty string.
{{% /warn %}}

```
# Hostname advertised by this host for remote addresses.  This must be resolvable by all
# other nodes in the cluster
hostname="<data-node-hostname>"

[enterprise]
  # license-key and license-path are mutually exclusive, use only one and leave the other blank
  license-key = "<your_license_key>" # Mutually exclusive with license-path

  # license-key and license-path are mutually exclusive, use only one and leave the other blank
  license-path = "/path/to/readable/JSON.license.file" # Mutually exclusive with license-key
```

### 6. Start the data node

On sysvinit systems, use the `service` command:
```
sudo service influxdb start
```

On systemd systems, use the `systemctl` command:
```
sudo systemctl start influxdb
```

### 7. Add the node to the cluster

From a **meta** node in the cluster, run:
```
influxd-ctl add-data <data-node-hostname>:8088
```
You should see:
```
Added data node y at data-node-hostname:8088
```

Note: it may take a few minutes before the existing data become available in the cluster.

## Final steps

### 1. Add any data nodes that you removed from cluster back into the cluster

From a **meta** node in the InfluxDB Enterprise cluster, run:
```
influxd-ctl add-data <the-hostname>:8088
```
Output:
```
Added data node y at the-hostname:8088
```

Finally verify that all nodes are now members of the cluster as expected:

```
influxd-ctl show
```

### 2. Rebalance the cluster

Increase the [replication factor](/enterprise_influxdb/v1.3/concepts/glossary/#replication-factor)
on all existing retention polices to the number of data nodes in your cluster.
You can do this with [ALTER RETENTION POLICY](https://docs.influxdata.com/influxdb/v1.3/query_language/database_management/#modify-retention-policies-with-alter-retention-policy).

Next, [rebalance](/enterprise_influxdb/v1.3/guides/rebalance/) your cluster manually to meet the desired
replication factor for existing shards.

Finally, if you were using [Chronograf](/{{< latest "telegraf" >}}/), you can
add your Enterprise instance as a new data source.  If you were not using
[Chronograf](/{{< latest "telegraf" >}}/introduction/installation/), we recommend going through
the installation instructions and using it as your primary management UI for the instance.


text:
import unittest
import hashcrypto.bytesop_fallback

def ba(*args):
    return bytes(bytearray(*args))

class TestUtilFunctions(unittest.TestCase):

    def test_b_xor(self):
        b = ba(range(32))
        self.assertEqual(ba(32), ba(hashcrypto.bytesop_fallback.op_xor(b, b)))
        self.assertEqual(b, ba(hashcrypto.bytesop_fallback.op_xor(b, ba(32))))

if __name__ == '__main__':
    unittest.main()

redpajama_set_name: RedPajamaGithub


text:
package org.apereo.portal.spring.web.context.support;

import java.io.Serializable;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apereo.portal.url.IPortalRequestUtils;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.Scope;
import org.springframework.web.context.request.SessionScope;
import org.springframework.web.util.WebUtils;

/**
 * Wraps {@link SessionScope} to provide functionality when no session is available by using
 * a singleton instance.
 *
 * @author Eric Dalquist
 * @version $Revision$
 */
public class PortalSessionScope implements Scope {
    public static final String DESTRUCTION_CALLBACK_NAME_PREFIX = PortalSessionScope.class.getName() + ".DESTRUCTION_CALLBACK.";

    protected final Log logger = LogFactory.getLog(this.getClass());

    private IPortalRequestUtils portalRequestUtils;

    public IPortalRequestUtils getPortalRequestUtils() {
        return this.portalRequestUtils;
    }
    @Autowired
    public void setPortalRequestUtils(IPortalRequestUtils portalRequestUtils) {
        this.portalRequestUtils = portalRequestUtils;
    }

    /*
     * (non-Javadoc)
     * @see org.springframework.beans.factory.config.Scope#resolveContextualObject(java.lang.String)
     */
    @Override
	public Object resolveContextualObject(String arg0) {
		//TODO implement me!
		return null;
	}
    /* (non-Javadoc)
     * @see org.springframework.beans.factory.config.Scope#get(java.lang.String, org.springframework.beans.factory.ObjectFactory)
     */
    public Object get(String name, ObjectFactory<?> objectFactory) {
        final HttpSession session = this.getPortalSesion(true);

        final Object sessionMutex = WebUtils.getSessionMutex(session);
        synchronized (sessionMutex) {
            Object scopedObject = session.getAttribute(name);
            if (scopedObject == null) {
                scopedObject = objectFactory.getObject();
                session.setAttribute(name, scopedObject);
            }

            return scopedObject;
        }
    }

    /* (non-Javadoc)
     * @see org.springframework.beans.factory.config.Scope#getConversationId()
     */
    public String getConversationId() {
        final HttpSession session = this.getPortalSesion(false);

        if (session == null) {
            return null;
        }

        return session.getId();
    }

    /* (non-Javadoc)
     * @see org.springframework.beans.factory.config.Scope#registerDestructionCallback(java.lang.String, java.lang.Runnable)
     */
    public void registerDestructionCallback(String name, Runnable callback) {
        final HttpSession session = this.getPortalSesion(true);
        final DestructionCallbackBindingListener callbackListener = new DestructionCallbackBindingListener(callback);
        session.setAttribute(DESTRUCTION_CALLBACK_NAME_PREFIX + name, callbackListener);
    }

    /* (non-Javadoc)
     * @see org.springframework.beans.factory.config.Scope#remove(java.lang.String)
     */
    public Object remove(String name) {
        final HttpSession session = this.getPortalSesion(false);
        if (session == null) {
            return null;
        }

        final Object sessionMutex = WebUtils.getSessionMutex(session);
        synchronized (sessionMutex) {
            final Object attribute = session.getAttribute(name);
            if (attribute != null) {
                session.removeAttribute(name);
            }

            return attribute;
        }
    }

    protected HttpSession getPortalSesion(boolean create) {
        final HttpServletRequest portalRequest = this.portalRequestUtils.getCurrentPortalRequest();
        return portalRequest.getSession(create);
    }

    /**
     * Adapter that implements the Servlet 2.3 HttpSessionBindingListener
     * interface, wrapping a session destruction callback.
     */
    private static class DestructionCallbackBindingListener implements HttpSessionBindingListener, Serializable {
        private static final long serialVersionUID = 1L;

        private transient final Runnable destructionCallback;

        public DestructionCallbackBindingListener(Runnable destructionCallback) {
            this.destructionCallback = destructionCallback;
        }

        public void valueBound(HttpSessionBindingEvent event) {
        }

        public void valueUnbound(HttpSessionBindingEvent event) {
            if (this.destructionCallback != null) {
                this.destructionCallback.run();
            }
        }
    }

}


text:
<?xml version='1.0' encoding='UTF-8'?>
<resources>
  <string name="action_cancel">Peruuta</string>
  <string name="action_submit">Lähetä</string>
  <string name="announcement">Huomio</string>
  <string name="app_empty">Sovelluksia ei löytynyt.</string>
  <string name="app_label">Palaute</string>
  <string name="app_name">Palaute</string>
  <string name="app_search">Hae sovelluksia</string>
  <string name="btn_send">Lähetä</string>
  <string name="bugreport_dialog_not_show_again">Älä näytä uudelleen</string>
  <string name="bugreport_dialog_submit_content">Tallennat sovelluslokeja tälle laitteelle nyt. Lokit saattaa sisältää henkilökohtaisia tietoja ja sijaintitietosi. Älä jaa lokeja kenenkään kanssa, jos et tahdo näiden tietojen tulevan julki.</string>
  <string name="bugreport_dump_complete_notification_summary">Napauta katsoaksesi.</string>
  <string name="bugreport_dump_complete_notification_title">Luo virheraportti</string>
  <string name="bugreport_dump_start_notification_summary">Tämä saattaa kestää useita minuutteja.</string>
  <string name="bugreport_dump_start_notification_title">Luodaan virheraporttia…</string>
  <string name="bugreport_tool_log_dumping_desc">Kestää noin minuutin</string>
  <string name="bugreport_tool_log_dumping_title">Luodaan virheraporttia</string>
  <string name="close_feedback_main">Piilota</string>
  <string name="cta_cancel">Peruuta</string>
  <string name="cta_confirm">OK</string>
  <string name="cta_dialog_content">Tämä sovellus tarvitsee internet yhteyden toimiakseen normaalisti.</string>
  <string name="cta_dialog_title">Internet yhteys</string>
  <string name="cta_not_show_again">Älä näytä uudestaan</string>
  <string name="customer_service_apply">Pyydä asiakaspalvelua</string>
  <string name="customer_service_complain">Ilmoita asiakaspalvelulle</string>
  <string name="customer_service_station">Palveluiden sijainnit</string>
  <string name="default_text_view">TextView</string>
  <string name="description">Kuvaile ongelma</string>
  <string name="dialog_ask_delete">Poista</string>
  <string name="dialog_ask_quit">Poistu</string>
  <string name="discard_draft_dialog_button_cancel">Pysy täällä</string>
  <string name="discard_draft_dialog_button_discard">Hylkää</string>
  <string name="discard_draft_dialog_content">Kaikki tehdyt muutokset menetetään</string>
  <string name="discard_draft_dialog_title">Hylätäänkö luonnos?</string>
  <string name="err_type">Virheen tyyppi</string>
  <string name="err_type_app">Sovellus</string>
  <string name="err_type_appstore">Sovelluskauppa</string>
  <string name="err_type_bluetooth">Bluetooth</string>
  <string name="err_type_camera">Kamera</string>
  <string name="err_type_hardware">Laitteisto</string>
  <string name="err_type_hardware_summary">Painikkeet, lataaminen, anturit, jne.</string>
  <string name="err_type_more">Lisää</string>
  <string name="err_type_nonsystemapp">Muut sovellukset</string>
  <string name="err_type_power_consuming">Virrankäyttö</string>
  <string name="err_type_reboot">Uudelleenkäynnistykset</string>
  <string name="err_type_signal">Verkko</string>
  <string name="err_type_suggestion">Ehdotukset</string>
  <string name="err_type_system">Järjestelmä</string>
  <string name="err_type_system_summary">Muisti, suorituskyky, jne.</string>
  <string name="err_type_systemapp">MIUI sovellukset</string>
  <string name="err_type_translate">Kieli</string>
  <string name="err_type_wifi">Wi-Fi</string>
  <string name="err_type_xiaomi_family">Mi Koti</string>
  <string name="err_type_xiaomi_service">Asiakaspalvelu</string>
  <string name="error_no_connection">Verkkoyhteyttä ei voi muodostaa</string>
  <string name="feedback_bug_status_change_notification_desc">%1$s ongelma \"%2$s\"</string>
  <string name="feedback_choose_module">Valitse kohde</string>
  <string name="feedback_choose_module_hint">Vaadittu</string>
  <string name="feedback_choose_reproductivity">Toistuvuus</string>
  <string name="feedback_choose_third_app_name">Valitse sovelluksen nimi</string>
  <string name="feedback_collect_log_failed">Lokitietoja ei saatu</string>
  <string name="feedback_contact_info_hint">Puhelinnumero/Sähköposti</string>
  <string name="feedback_continue">Jatka palautetta</string>
  <string name="feedback_delete_images">Poista kuvat</string>
  <string name="feedback_description">Kuvaus</string>
  <string name="feedback_description_bugreport_hint">Jossain tapauksissa (…) puhelimeni käyttäytyy omituisesti (…).</string>
  <string name="feedback_description_hint">Kuvaile ongelmaasi</string>
  <string name="feedback_description_label">Kuvaus</string>
  <string name="feedback_description_suggest_hint">Haluaisin, että lisäätte uuden ominaisuuden (…) koska tarvitsen (…)."</string>
  <string name="feedback_detail_tile">Edistyminen</string>
  <string name="feedback_empty_report_list">Ei raportteja vielä</string>
  <string name="feedback_guess">Arvauksemme</string>
  <string name="feedback_history_remind_login_desc">Kirjaudu Mi Tiliisi nähdäksesi lisätietoja ja virheilmoituksesi edistymistä</string>
  <string name="feedback_id">ID: %d</string>
  <string name="feedback_jira_key">JIRA Avain: %s</string>
  <string name="feedback_package_log_failed">Lokitietoja ei voitu pakata</string>
  <string name="feedback_phone_model_label">Puhelimen malli</string>
  <string name="feedback_probability_label">Todennäköisyys</string>
  <string name="feedback_remind_login_btn">Kirjaudu</string>
  <string name="feedback_report_remind_login_desc">Kirjaudu Mi Tiliisi, jotta meidän insinöörit voivat olla sinuun yhteydessä. Voit myös katsella raporttisi edistymistä täältä \"Minun raportit\"."</string>
  <string name="feedback_report_remind_login_desc2">Voit myös nähdä raporttisi etenemistä menemällä \"Raporttini\".</string>
  <string name="feedback_retest_label">Askeleet ongelman jäljentämiseen</string>
  <string name="feedback_select_images">Lisää kuvia</string>
  <string name="feedback_select_modem_log">Lisää modeemin lokitiedot</string>
  <string name="feedback_select_modem_log_not_select_desc">Ei valittu \"Lisää modeemin lokit\"</string>
  <string name="feedback_select_modem_log_select_desc">Valittu \"Lisää modeemin lokit\"</string>
  <string name="feedback_select_problem">Ongelmat</string>
  <string name="feedback_select_problem_not_select_desc">Ei valittu \"Ongelmat\"</string>
  <string name="feedback_select_problem_select_desc">Valittu \"Ongelmat\"</string>
  <string name="feedback_select_suggestion">Ehdotukset</string>
  <string name="feedback_select_suggestion_not_select_desc">Ei valittu \"Ehdotukset\"</string>
  <string name="feedback_select_suggestion_select_desc">Valittu \"Ehdotukset\"</string>
  <string name="feedback_select_upload_log">Lisää lokitiedot</string>
  <string name="feedback_select_upload_log_not_select_desc">Ei valittu \"Lisää lokit\"</string>
  <string name="feedback_select_upload_log_select_desc">Valittu \"Lisää lokit\"</string>
  <string name="feedback_status_answered">Vastattu</string>
  <string name="feedback_status_change_notification_title">Raporttisi edistyminen päivitettiin</string>
  <string name="feedback_status_commit_failed_title">Raporttia ei voitu lähettää</string>
  <string name="feedback_status_commit_succ_title">Lähetetty</string>
  <string name="feedback_status_commit_uploading_title">Lähetetään…</string>
  <string name="feedback_status_forum_reply">Vastaa</string>
  <string name="feedback_status_jira_comment">Lisää kommentti</string>
  <string name="feedback_status_more">Tiedot</string>
  <string name="feedback_status_processing">Käsitellään…</string>
  <string name="feedback_status_recorded">Palaute vastaanotettu</string>
  <string name="feedback_status_replyed">Vastattu</string>
  <string name="feedback_status_reresolved">Selvitetty</string>
  <string name="feedback_status_submit_attachment">Liitetiedosto lähetettiin onnistuneesti</string>
  <string name="feedback_status_supplement">Kuvaile ongelmasi tiedot</string>
  <string name="feedback_status_supplement_more">Lisää kommentti</string>
  <string name="feedback_submit_failed_notification_desc">Näytä tiedot</string>
  <string name="feedback_submit_failed_notification_retry">Lähetä uudestaan</string>
  <string name="feedback_submit_failed_notification_title">Raporttia ei voitu lähettää</string>
  <string name="feedback_submit_hint">Auta meitä ratkaisemaan bugit nopeammin raportoimalla ne aina meille, kun kohtaat sellaisen.</string>
  <string name="feedback_submit_hint1">Ilmoitamme sinulle raporttisi edistymisestä</string>
  <string name="feedback_submit_hint2">Siirry \"Minun raportit\" nähdäksesi tietoja</string>
  <string name="feedback_submit_hint_gone">Suljettiin viesti</string>
  <string name="feedback_submit_succ">Lähetetty onnistuneesti</string>
  <string name="feedback_submit_succ_button">Valmis</string>
  <string name="feedback_submitting">Lähetetään</string>
  <string name="feedback_suggestion_status_change_notification_desc">%1$s ehdotus \"%2$s\"</string>
  <string name="feedback_third_packagename_hint">Mikä kolmannen osapuolen sovellus aiheuttaa ongelmia?</string>
  <string name="feedback_title">Otsikko</string>
  <string name="feedback_title_hint">Kuvaile ongelma lyhyesti</string>
  <string name="feedback_title_reproductivity">Valitse toistuvuus</string>
  <string name="feedback_tracking">Seuraa ongelmia</string>
  <string name="feedback_version_label">Versio</string>
  <string name="feesback_list">Raportit</string>
  <string name="first_position">2#</string>
  <string name="floor">%1$s#</string>
  <string name="from">lähettäjä %1$s</string>
  <string name="goon_feedback_main">Jatka</string>
  <string name="hint_feedback_main">Kuvaile ongelma</string>
  <string name="issue_search">Haku</string>
  <string name="loading_apps">Ladataan listaa…</string>
  <string name="login_system_failed">Kirjautuminen epäonnistui, yritä uudestaan</string>
  <string name="logo_title">Palaute</string>
  <string name="max_error">%1$s täytyy olla lyhyempi.</string>
  <string name="menu_copy">Kopioi</string>
  <string name="message_label">Viesti</string>
  <string name="michat_app_name">Online tuki</string>
  <string name="michat_artificial_customer_phone_dial_error">Jos et voi soittaa 400 palvelunumeroon, soita %1$s käyttäen toista puhelinta</string>
  <string name="michat_artificial_customer_text">Asiakaspalvelija</string>
  <string name="michat_attach_image">Kuva</string>
  <string name="michat_attach_smiley">Hymiö</string>
  <string name="michat_attach_take_photo">Kamera</string>
  <string name="michat_back_to_detail">Siirry takaisin chattiin</string>
  <string name="michat_cant_access_artificial">Tukeen ei saada yhteyttä juuri nyt</string>
  <string name="michat_cant_join_artificial">Yhteys epäonnistui verkkovirheen takia</string>
  <string name="michat_check_network">Tarkista verkkoasetukset</string>
  <string name="michat_close_text">Chat loppui</string>
  <string name="michat_comment_net_error">Verkkoyhteyttä ei voi muodostaa, yritä myöhemmin uudestaan</string>
  <string name="michat_comment_submit">Arvioi ja siirry takaisin</string>
  <string name="michat_comment_thx">Kiitos palautteestasi!</string>
  <string name="michat_customer_join">Liity chattiin</string>
  <string name="michat_customer_quit">Tukihenkilö lähti chatistä</string>
  <string name="michat_customer_text">Asiakastuki</string>
  <string name="michat_data_error">Ilmeni virhe, yritä myöhemmin uudestaan</string>
  <string name="michat_error_need_login_btn">Kirjaudu</string>
  <string name="michat_error_need_login_text">Kirjautumalla voit käyttää online tukea</string>
  <string name="michat_failed_to_add_media">Anteeksi, %1$s ei voitu lähettää</string>
  <string name="michat_failed_to_fetch_fql">UKK tietoa ei saatu, tarkasta verkko-yhteys</string>
  <string name="michat_feedback_title_name">Palautteen katsaus</string>
  <string name="michat_finish_text">Valmis</string>
  <string name="michat_in_artifical_customer_state">Et voi tehdä tätä, kun henkilö on auttamassa sinua</string>
  <string name="michat_invalid_url">Virheellinen URL</string>
  <string name="michat_invation_invite_fail">Pahoittelut, meidän tukihenkilöt ovat kiireisiä juuri nyt. Yritä myöhemmin uudestaan.</string>
  <string name="michat_invation_invite_full">Pahoittelut, meidän tukihenkilöt ovat kiireisiä juuri nyt. Yritä myöhemmin uudestaan.</string>
  <string name="michat_kefu_welcome">Tervetuloa Xiaomin online tukeen!</string>
  <string name="michat_lose_artificial">Tapahtui verkkovirhe, poistuit keskustelusta</string>
  <string name="michat_menu_copy_text">Kopioi</string>
  <string name="michat_message_copy_info">Kopioitu leikepöydälle</string>
  <string name="michat_message_error_network">Verkkoyhteyttä ei voitu muodostaa</string>
  <string name="michat_message_join_again">Hienoa, tulit takaisin!</string>
  <string name="michat_message_robot_welcome">Nimeni on Mi Bunny. Olen online-tuen robotti.</string>
  <string name="michat_message_send_error_network">Lähettäminen epäonnistui, tarkista verkkoyhteys</string>
  <string name="michat_motto">Mi Tuki on valmis auttamaan</string>
  <string name="michat_msg_image_upload_error">Kuvaa ei voitu lähettää, yritä myöhemmin uudestaan</string>
  <string name="michat_msg_input_info">Kuvaile ongelmasi lyhyesti</string>
  <string name="michat_msg_status_arrived">Lähetetty</string>
  <string name="michat_msg_status_send">Lähetä</string>
  <string name="michat_msg_status_sendding">Lähetetään…</string>
  <string name="michat_msg_too_long_info">Olet syöttänyt %1$d merkkiä. Voit syöttää enintään %2$d merkkiä.</string>
  <string name="michat_net_error_info">Ei verkkoyhteyttä, napauta tästä Asetuksiin</string>
  <string name="michat_network_unavaliable">Infoa ei saatu, tarkasta verkkoyhteys</string>
  <string name="michat_no_good_message_title">Tämä ei ratkaise ongelmaani.</string>
  <string name="michat_product_click_text">Näytä</string>
  <string name="michat_pull_to_refresh_pull_label">Vedä alas nähdäksesi historia</string>
  <string name="michat_pull_to_refresh_refreshing_label">Ladataan historiaa…</string>
  <string name="michat_pull_to_refresh_release_label">Vapauta nähdäksesi historia</string>
  <string name="michat_queue_pos_update">%1$d henkilöä on jonossa ennen sinua, odota hetki…</string>
  <string name="michat_return_to_outside">Poistu</string>
  <string name="michat_service_unavailiable">Infoa ei saatu, yritä myöhemmin uudestaan</string>
  <string name="michat_skillset_business_type_title">Valitse palvelu</string>
  <string name="michat_skillset_product_title">Valitse tuote</string>
  <string name="michat_transfer_message">Etsitään henkilöä, joka voi auttaa sinua…</string>
  <string name="michat_try_again">Kokeile uudestaan</string>
  <string name="michat_type_list_null">Infoa ei saatu, yritä myöhemmin uudestaan</string>
  <string name="michat_type_picture">Kuva</string>
  <string name="michat_user_quit">Poistuit keskustelusta</string>
  <string name="michat_wait_for_a_moment">Odota hetki, apu on matkalla!</string>
  <string name="michat_webview_title">Näytä tiedot</string>
  <string name="min_error">%1$s pitäisi olla pidempi.</string>
  <string name="mobile_data_note_dialog_cancel">Odota Wi-Fiä</string>
  <string name="mobile_data_note_dialog_confirm">Lähetä</string>
  <string name="mobile_data_note_dialog_content">Käyttämällä mobiilidataa lokitietojen lähettämiseen saattaa luoda lisää maksuja.</string>
  <string name="mobile_data_note_dialog_content_with_file_size">Lähettämällä lokitiedot käyttämällä mobiilidatayhteyttä vaatii %s Mt edestä dataa.</string>
  <string name="mobile_data_note_dialog_title">Tiedonsiirtovaroitus</string>
  <string name="modem_tool_log_dumping_desc">Napauta kuvaketta aloittaaksesi</string>
  <string name="modem_tool_log_dumping_title">Tallennetaan modeemin lokitietoja</string>
  <string name="modem_tool_log_finish_desc">Loki tallennettiin nimellä %s</string>
  <string name="modem_tool_log_finish_title">Modeemin loki tallennettiin</string>
  <string name="module_communication">Kommunikointi</string>
  <string name="module_data">Tallennustila & Kaksoissovellukset</string>
  <string name="module_desktop">Aloitusnäyttö & asetukset</string>
  <string name="module_finance">Talous & Mi Lompakko</string>
  <string name="module_google_apps">Google sovellukset</string>
  <string name="module_item_less">Piilota</string>
  <string name="module_item_more">Lisää</string>
  <string name="module_medias">Media</string>
  <string name="module_more">Lisää</string>
  <string name="module_network">Verkko</string>
  <string name="module_search">Haku</string>
  <string name="module_security">Tietoturva & Mi Pilvi</string>
  <string name="module_system">Järjestelmä</string>
  <string name="module_tools">Järjestelmän työkalut</string>
  <string name="modules">Valitse</string>
  <string name="multi_graph_more">Yhteensä: %d</string>
  <string name="network_err">Verkkoyhteyttä ei voi muodostaa.</string>
  <string name="network_errorbtntip_custom">Yritä uudestaan</string>
  <string name="network_errorbtntip_login">Kirjaudu</string>
  <string name="network_errorbtntip_noconnection">Tarkista verkon asetukset</string>
  <string name="network_errorbtntip_parse">Yritä uudestaan</string>
  <string name="network_errorbtntip_server">Yritä uudestaan</string>
  <string name="network_errorbtntip_timeout">Yritä uudestaan</string>
  <string name="network_errorbtntip_unknow">Yritä uudestaan</string>
  <string name="network_errortip_custom">Customization error</string>
  <string name="network_errortip_login">Kirjaudu ensin</string>
  <string name="network_errortip_noconnection">Verkkoyhteyttä ei voi muodostaa, tarkasta verkon asetukset</string>
  <string name="network_errortip_parse">Tapahtui virhe</string>
  <string name="network_errortip_server">Tapahtui palvelinvirhe, yritä myöhemmin uudestaan</string>
  <string name="network_errortip_timeout">Yhteyden aikakatkaisu, yritä myöhemmin uudestaan</string>
  <string name="network_errortip_unknow">Yritämme korjata sen…</string>
  <string name="network_unavailable_dialog_button_ok">OK</string>
  <string name="network_unavailable_dialog_content">Raporttisi lähetetään, kun sinulla on yhteys internetiin.</string>
  <string name="network_unavailable_dialog_title">Verkkoyhteyttä ei voi muodostaa</string>
  <string name="non_system_app_select">Ladatut sovellukset</string>
  <string name="nothing">--</string>
  <string name="open_feedback_main">Lisää</string>
  <string name="packaging_dialog_content">Luodaan raporttia…</string>
  <string name="permission_granted">%1$s käyttöoikeus myönnetty</string>
  <string name="pic_not_exist">Tätä kuvaa ei ole olemassa</string>
  <string name="plus_one_submit_dialog_content">Palautteesi, sisältäen liitetiedot ja virhelokit lähetetään MIUI:n palvelimille. Se saattaa sisältää henkilökohtaista tietoa ja sijaintitietosi.</string>
  <string name="plus_one_submit_dialog_not_show_again">Muista valinta</string>
  <string name="post_miui_bbs_failed">Foorumille postitus epäonnistui</string>
  <string name="pull_to_refresh_pull_label">Vedä alas päivittääksesi</string>
  <string name="pull_to_refresh_refreshing_label">Päivitetään…</string>
  <string name="pull_to_refresh_release_label">Vapauta päivittääksesi</string>
  <string name="refresh">Päivitä</string>
  <string name="related_question_answer_details">Liittyvä ongelma</string>
  <string name="reply">Vastaa</string>
  <string name="reply_failed">Vastaaminen epäonnistui</string>
  <string name="reply_successful">Vastaaminen onnistui</string>
  <string name="report_miui">Ilmoita bugi</string>
  <string name="request_empty_data">Ei tietoja</string>
  <string name="save_pic">Tallenna</string>
  <string name="save_pic_fail">Kuvaa ei voitu tallentaa, tarkasta SD-kortti</string>
  <string name="save_pic_success">Kuva tallennettiin kohteeseen %s</string>
  <string name="screen_lock">Näyttölukitus</string>
  <string name="second_position">3#</string>
  <string name="section_description">Selitys</string>
  <string name="section_err_type">Virheen tyyppi</string>
  <string name="section_screenshot">Kuvakaappaus</string>
  <string name="select_system_app_tag">Valitse ongelma</string>
  <string name="submit_dialog_cancel">En hyväksy</string>
  <string name="submit_dialog_confirm">Hyväksyn</string>
  <string name="submit_dialog_content">Palautteesi, liitetiedostot ja lokitiedostot lähetetään MIUI:n palvelimille. Se saattaa sisältää henkilökohtaisia tietoja.</string>
  <string name="submit_dialog_content_global">Palautteesi, sisältäen liitetiedot (jos liitetty) ja virhelokit (voit poistaa valinnat niistä valintalaatikoista joita et tahdo lähettää) lähetetään MIUI:n palvelimille ja rajoitetulle MIUI:n keskustelupalstan kehittäjille. Palstojesi ja keskustelupalstan aktiviteettitietosi myös kerätään analysoitavaksi ja tuleviin yhteydenottoihin. Lokitiedot saattaa sisältää henkilokohtaisia tietoja ja sijaintitietosi.</string>
  <string name="submit_dialog_title">Lähetä raportti</string>
  <string name="submit_feedback_info_failed">Raporttia ei voitu lähettää</string>
  <string name="suggestion_description">Lisää selitys tähän</string>
  <string name="system_app_select">Järjestelmän sovellukset</string>
  <string name="systemui">Ilmoitusalue</string>
  <string name="tab_title_chat">UKK</string>
  <string name="tab_title_my_reports">Minun raportit</string>
  <string name="tab_title_report">Palaute</string>
  <string name="time_in_justnow">Juuri nyt</string>
  <string name="title_answer_feedback_main">Löysimme vastauksia!</string>
  <string name="title_bbs_feedback_main">Lisätietoja Mi puhelimista</string>
  <string name="title_customer_service">Asiakaspalvelu</string>
  <string name="title_frequent_question_feedback_main">UKK</string>
  <string name="title_mi_family">Mi Koteja lähellä</string>
  <string name="title_nonsystem_app">Muut sovellukset</string>
  <string name="title_same_question_feedback_main">MIUI keskustelupalstalla samankaltaisia ongelmia</string>
  <string name="title_system_app">MIUI sovellukset</string>
  <string name="toast_description_required">Sinun täytyy kirjoittaa selitys</string>
  <string name="toast_feedback_collect_store">Kerätään lokeja…</string>
  <string name="toast_feedback_network_unavailable">Verkkoyhteyttä ei voi muodostaa</string>
  <string name="toast_feedback_pending_wlan">Raportit lähetetään, kun olet yhteydessä Wi-Fi verkkoon</string>
  <string name="toast_feedback_submitted">Raportti lähetetty</string>
  <string name="toast_feedback_submitting">Lähetetään…</string>
  <string name="toast_feedbackservice_in_submit">Käsitellään edellistä palautetta…</string>
  <string name="toast_fill_brackets">Raportistasi puuttuu joitain tietoja</string>
  <string name="toast_log_not_exists">Vaadittu lokitiedosto on poistettu tai sitä ei ole olemassa</string>
  <string name="toast_log_too_large">Ei voi lähettää. Tiedosto on liian suuri.</string>
  <string name="toast_module_required">Valitse kohde</string>
  <string name="toast_network_unavailable">Lähetys epäonnistui. Verkkoyhteyttä ei voi muodostaa.</string>
  <string name="toast_pending_log_collection">Kerätään vieläkin lokeja…</string>
  <string name="toast_pic_not_exists">Välimuistissa oleva kuva on poistettu</string>
  <string name="toast_post_deleted">Tätä otsikkoa ei ole olemassa, se on poistettu, tai muokattu.</string>
  <string name="toast_problem_class_required">Valitse kategoria</string>
  <string name="toast_report_copied_to_clipboard">Raportti kopioitiin leikepöydälle</string>
  <string name="toast_report_sent_failed">Raporttia ei voida lähettää</string>
  <string name="toast_report_sent_succeed">Raportti on lähetetty</string>
  <string name="toast_screenshot_too_large">10 Mt suurempia tiedostoja ei voi lähettää.</string>
  <string name="toast_third_packagename_required">Syötä sovelluksen nimi</string>
  <string name="toast_title_required">Kuvaile ongelmasi</string>
  <string name="topic_author">1#</string>
  <string name="try_again">Yritä uudestaan</string>
  <string name="upload_log_failed">Lokitietojen lähetys epäonnistui</string>
  <string name="warning_field_empty">Syötä %1$s</string>
  <string name="warning_field_invalid">Valitse kelpaava %1$s</string>
</resources>


text:
from enum import Enum,EnumMeta

SymEnum = None  # class defined after use

class SymEnumValue(object):
    "Class used to define SymEnum member that have additional attributes."
    def __init__(self, value, externalName=None):
        self.value = value
        self.externalName = externalName

class _SysEnumExternalNameMap(object):
    "Mapping between internal and external member names"
    def __init__(self):
        self.intToExt = {}
        self.extToInt = {}

    def add(self, intName, extName):
        self.intToExt[intName] = extName
        self.extToInt[extName] = intName

    def toExtName(self, intName):
        "return name unchanged in no mapping"
        return self.intToExt.get(intName, intName)

    def toIntName(self, extName):
        "return name unchanged in no mapping"
        return self.extToInt.get(extName, extName)

class SymEnumMeta(EnumMeta):
    """metaclass for SysEnumMeta that implements looking up singleton members
    by string name."""

    @staticmethod
    def __symEnumValueUpdate(classdict, name, extNameMap):
        "record info about a member specified with SymEnum and update value in classdict"
        symValue = classdict[name]
        classdict[name] = symValue.value
        extNameMap.add(name, symValue.externalName)

    @staticmethod
    def __symEnumDerivedNew(metacls, cls, bases, classdict):
        "update class fields defined as SymEnumValue to register external names"
        extNameMap = classdict["__extNameMap__"] = _SysEnumExternalNameMap()
        for name in classdict.iterkeys():
            if isinstance(classdict[name], SymEnumValue):
                SymEnumMeta.__symEnumValueUpdate(classdict, name, extNameMap)
        return EnumMeta.__new__(metacls, cls, bases, classdict)

    def __new__(metacls, cls, bases, classdict):
        if SymEnum in bases:
            return SymEnumMeta.__symEnumDerivedNew(metacls, cls, bases, classdict)
        else:
            return EnumMeta.__new__(metacls, cls, bases, classdict)

    def __call__(cls, value, names=None, module=None, typ=None):
        "look up a value object, either by name of value,"
        if (names is None) and isinstance(value, str):
            # map string name to instance, check for external name
            value = cls.__extNameMap__.toIntName(value)
            member = cls._member_map_.get(value)
            if member is None:
                raise ValueError("'%s' is not a member or alias of %s" % (value, cls.__name__))
            else:
                return member
        else:
            return EnumMeta.__call__(cls, value, names, module, typ)

class SymEnum(Enum):
    """
    Metaclass for symbolic enumerations.  These are easily converted between
    string values and Enum objects.  This support construction from string
    values and str() returns value without class name.  Aliases can be
    added using the Enum approach of:
        val = 1
        valalias = val

    To handle string values that are not valid Python member names, an external
    name maybe associated with a field using a SymEnumValue object
        utr5 = SymEnumValue(1, "5'UTR")

    Either field name or external name maybe used to obtain a value.  The external
    name is returned with str().
    """
    __metaclass__ = SymEnumMeta

    def __str__(self):
        return self.__extNameMap__.toExtName(self.name)

    def __le__(self, other):
        if isinstance(other, SymEnum):
            return self.value <= other.value
        else:
            return self.value <= other

    def __lt__(self, other):
        if isinstance(other, SymEnum):
            return self.value < other.value
        else:
            return self.value < other

    def __ge__(self, other):
        if isinstance(other, SymEnum):
            return self.value >= other.value
        else:
            return self.value >= other

    def __gt__(self, other):
        if isinstance(other, SymEnum):
            return self.value > other.value
        else:
            return self.value > other

    def __eq__(self, other):
        if isinstance(other, SymEnum):
            return self.value == other.value
        else:
            return False

    def __ne__(self, other):
        if isinstance(other, SymEnum):
            return self.value != other.value
        else:
            return True


text:
<?php

include_once '../plantilla/incio_plantilla.php';
include_once '../plantilla/menu_navegacion.php';
?>

            Modificar

Actividades 35%

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 1" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota1" placeholder="   10.0" size="5">

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 2" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota2" placeholder="   10.0" size="5">

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 3" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota3" placeholder="   10.0" size="5">

                            &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    R" size="5">
                            &nbsp<INPUT class="form-group" type="text"  name="nota2" placeholder="    P " size="5">

                            <input type="submit" value="Guardar" name="guardar" class="btn btn-info">
                            <input type="submit" value="Cancelar" name="cancel" class="btn btn-secundary">

Actividades 35%

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 1" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota1" placeholder="   10.0" size="5">

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 2" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota2" placeholder="   10.0" size="5">

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 3" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota3" placeholder="   10.0" size="5">

                            &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    R" size="5">
                            &nbsp<INPUT class="form-group" type="text"  name="nota2" placeholder="    P " size="5">

                            <input type="submit" value="Guardar" name="guardar" class="btn btn-info">
                            <input type="submit" value="Cancelar" name="cancel" class="btn btn-secundary">

Actividades 30%

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 1" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota1" placeholder="   10.0" size="5">

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 2" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota2" placeholder="   10.0" size="5">

                        &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    Actividad 3" size="15">
                        &nbsp<INPUT class="form-group" type="text"  name="nota3" placeholder="   10.0" size="5">

                            &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT class="form-group" type="text"  name="act1" placeholder="    R" size="5">
                            &nbsp<INPUT class="form-group" type="text"  name="nota2" placeholder="    P " size="5">

                            <input type="submit" value="Guardar" name="guardar" class="btn btn-info">
                            <input type="submit" value="Cancelar" name="cancel" class="btn btn-secundary">

            <input type="submit" style="color:white" value="Atras" name="atras" class="btn btn-warning" onclick="location = '/proyectoDi/modificarNotas.php'">

<?php

include_once '../plantilla/fin_plantilla.php';


text:
package com.podio.user;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.ws.rs.core.MediaType;

import com.podio.BaseAPI;
import com.podio.ResourceFactory;
import com.podio.contact.Profile;
import com.podio.contact.ProfileField;
import com.podio.contact.ProfileFieldValues;
import com.podio.contact.ProfileUpdate;
import com.sun.jersey.api.client.GenericType;

/**
 * This area holds all the users which just includes basic operations.
 */
public class UserAPI extends BaseAPI {

	public UserAPI(ResourceFactory resourceFactory) {
		super(resourceFactory);
	}

	/**
	 * Updates the active user. The old and new password can be left out, in
	 * which case the password will not be changed. If the mail is changed, the
	 * old password has to be supplied as well.
	 */
	public void updateUser(UserUpdate update) {
		getResourceFactory().getApiResource("/user/")
				.entity(update, MediaType.APPLICATION_JSON_TYPE).put();
	}

	/**
	 * Returns the current status for the user. This includes the user data,
	 * profile data and notification data.
	 *
	 * @return The status of the user
	 */
	public UserStatus getStatus() {
		return getResourceFactory().getApiResource("/user/status").get(
				UserStatus.class);
	}

	/**
	 * Returns the profile of the active user
	 *
	 * @return The profile for the user
	 */
	public Profile getProfile() {
		return getResourceFactory().getApiResource("/user/profile/").get(
				Profile.class);
	}

	/**
	 * Returns the field of the profile for the given key from the active user.
	 *
	 * @param field
	 *            The field to return the values for
	 * @return The values for the given field
	 */
	public <T, R> List<T> getProfileField(ProfileField<T, R> field) {
		List<R> values = getResourceFactory().getApiResource(
				"/user/profile/" + field.getName()).get(
				new GenericType<List<R>>() {
				});

		List<T> formatted = new ArrayList<T>();
		for (R value : values) {
			formatted.add(field.parse(value));
		}

		return formatted;
	}

	/**
	 * Updates the fields of an existing profile. All fields must be filled out,
	 * as any fields not included will not be part of the new revision.
	 *
	 * @param profile
	 *            The updated profile
	 */
	public void updateProfile(ProfileUpdate profile) {
		getResourceFactory().getApiResource("/user/profile/")
				.entity(profile, MediaType.APPLICATION_JSON_TYPE).put();
	}

	/**
	 * Updates a single field on the profile of the user
	 *
	 * @param field
	 *            The field that should be updated
	 * @param value
	 *            The new value of the field
	 */
	public <F> void updateProfileField(ProfileField<F, ?> field, F value) {
		if (field.isSingle()) {
			getResourceFactory()
					.getApiResource("/user/profile/" + field.getName())
					.entity(new ProfileFieldSingleValue<F>(value),
							MediaType.APPLICATION_JSON_TYPE).put();
		} else {
			getResourceFactory()
					.getApiResource("/user/profile/" + field.getName())
					.entity(new ProfileFieldMultiValue<F>(value),
							MediaType.APPLICATION_JSON_TYPE).put();
		}
	}

	/**
	 * Updates a single field on the profile of the user
	 *
	 * @param field
	 *            The field that should be updated
	 * @param values
	 *            The new values of the field
	 */
	public <F> void updateProfileField(ProfileField<F, ?> field, F... values) {
		updateProfileField(field, Arrays.asList(values));
	}

	/**
	 * Updates a single field on the profile of the user
	 *
	 * @param field
	 *            The field that should be updated
	 * @param values
	 *            The new values of the field
	 */
	public <F> void updateProfileField(ProfileField<F, ?> field, List<F> values) {
		if (field.isSingle()) {
			throw new IllegalArgumentException(
					"Field is only valid for single value");
		} else {
			getResourceFactory()
					.getApiResource("/user/profile/" + field.getName())
					.entity(new ProfileFieldMultiValue<F>(values),
							MediaType.APPLICATION_JSON_TYPE).put();
		}
	}

	/**
	 * Updates the fields of an existing profile. Will only update the fields in
	 * the values.
	 *
	 * @param values
	 *            The updated values for the profile
	 */
	public void updateProfile(ProfileFieldValues values) {
		getResourceFactory().getApiResource("/user/profile/")
				.entity(values, MediaType.APPLICATION_JSON_TYPE).put();
	}

	/**
	 * Gets the active user
	 *
	 * @return The active user
	 */
	public User getUser() {
		return getResourceFactory().getApiResource("/user/").get(User.class);
	}

	/**
	 * Returns the value of the property for the active user with the given
	 * name. The property is specific to the auth client used.
	 *
	 * @param key
	 *            The key of the property
	 */
	public boolean getProperty(String key) {
		return getResourceFactory().getApiResource("/user/property/" + key)
				.get(PropertyValue.class).getValue();
	}

	/**
	 * Sets the value of the property for the active user with the given name.
	 * The property is specific to the auth client used.
	 *
	 * @param key
	 *            The key of the property
	 * @param value
	 *            The value of the property
	 */
	public void setProperty(String key, boolean value) {
		getResourceFactory()
				.getApiResource("/user/property/" + key)
				.entity(new PropertyValue(value),
						MediaType.APPLICATION_JSON_TYPE).put();
	}

	/**
	 * Deletes the property for the active user with the given name. The
	 * property is specific to the auth client used.
	 *
	 * @param key
	 *            The key of the property that should be deleted
	 */
	public void deleteProperty(String key) {
		getResourceFactory().getApiResource("/user/property/" + key).delete();
	}
}